2011-02-23 64 views
0

相当长的问题;我怎样才能得到一个网页的其他网站上的标题?

我怎样才能做到用C以下#:

打开一个网页(最好是不可见) 检查网页是否重定向到不同的网页(网站已关闭,404等) 检查是否标题是不是等于说串

然后分开,(他们需要点击确认按钮)

打开他们的浏览器,并转到第一的地址(这将是唯一的一个)的超链接在网站上。

我真的一直在寻找在谷歌的年龄,并没有发现类似什么我需要什么。

无论你给我一个链接到一个网站上这方面的编程或实际源代码的教程不有所作为我。

回答

1

你可以使用WebRequest或HttpWebRequest,但是如果您需要浏览器UI,则需要使用WebBrowser控件:http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.aspx

您将需要从Navigate调用中处理完成事件,该事件将为您加载页面:

WebBrowser myWebBrowser = new WebBrowser(); 

webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_IDontKnow); 
myWebBrowser.Navigate("http://myurl.com/mypage.htm"); 

然后,您可以实现您的处理程序如下,并与web浏览器的用户界面需要互动...... DocumentText属性包含目前载入网页的HTML:

private void webBrowser1_IDontKnow(object sender, WebBrowserNavigatingEventArgs e) 

    { 

     CheckHTMLConfirmAndRedirect(webBrowser1.DocumentText); 

    } 
+1

看起来更简单,更高效。我可以使它看不见,并进行测试,错误或使其可见,让他们点击超链接。老实说,不知道选择哪个答案,他们都有优势。 – 2011-02-23 23:04:30

+0

很高兴你决定选择我的建议!祝你好运! – vdoogs 2011-03-01 22:53:57

2

退房的webrequest class,它可以做重定向:)那么你可以解析HTML和寻找使用XPath或东西

排序的标题标签像这样

using System.Xml; 
    using System.Xml.XPath; 
    using System.Xml.Linq; 
    using System.Net; 

    ... 

    HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/"); 
    myReq.AllowAutoRedirect = true; 
    myReq.MaximumAutomaticRedirections = 5; 
    XNode result; 
    using(var responseStream = myReq.GetResponse().GetResponseStream()) { 
    result = XElement.Load(responseStream); 
    } 

    var title = result.XPathSelectElement("//title").Value; 

obviosly你,XPath可(也许应该)是更复杂的:)你可以找到更多关于XPath here

上类似的说明,你可以对XML使用XPath你回来找链接,并挑选出第一个:

var links = result.XPathSelectElements("//a").Select(linktag => linktag.Attribute("href").Value); 

当你最终找到你要打开的网址,你可以使用

System.Diagnostics.Process.Start(links.First()); 

让它在浏览器中打开。这方面的一个好的方面是,它会打开浏览器是什么都为客户端的默认。它确实有安全隐患,虽然,你应该确保它的网址,而不是一个exe文件什么的。

也,其有可能是HTML中使用不同势大写字母的元素,你就必须寻找linsk

+0

谢谢,我会这样做的。你可以发送$ _POST [] PHP变量吗?如果是这样,那么我可以让PHP做所有的工作:) – 2011-02-23 22:43:21

+0

我不知道很多关于PHP的恐惧,但你可以发送URL参数和标题,如果你喜欢。 webrequest类不会对结果进行任何类型的解析或处理,它只会给你一个原始的字节流,你可以通过它传递给XmlReader的东西。 – aL3891 2011-02-23 22:51:33

1

使用HttpWebRequest的时候处理那些和解析响应:

private static void method1() 
{ 
    string strWORD = "pain"; 
    const string WORDWEBURI = "http://www.wordwebonline.com/search.pl?w="; 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(WORDWEBURI + strWORD.ToUpper()); 
    request.UserAgent = @"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"; 
    request.ContentType = "text/html"; 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

    StringBuilder sb = new StringBuilder(); 
    Stream resStream = response.GetResponseStream(); 

    byte[] buffer = new byte[8192]; 
    string tempString = null; 
    int count = 0; 

    do 
    { 
     // fill the buffer with data 
     count = resStream.Read(buffer, 0, buffer.Length); 

     // make sure we read some data 
     if (count != 0) 
     { 
      // translate from bytes to ASCII text 
      tempString = Encoding.UTF8.GetString(buffer, 0, count); 

      // continue building the string 
      sb.Append(tempString); 
     } 
    } 

    while (count > 0); // any more data to read? 

    Console.Write(sb.ToString()); 
} 
+0

哦,上帝比我想象的要多得多。感谢 – 2011-02-23 22:47:56

+0

这与使用WebClient.DownloadString()有什么不同?除了能够设置用户代理和什么。阅读小册子有什么好处? – 2011-02-23 22:52:30

+0

Web服务器可能会重定向自动化的自动请求。设置useragent是获得响应努力的一部分。 – ukhardy 2011-02-23 23:03:07

相关问题