如何在其他网站上获取页面标题?

时间:2011-02-23 22:31:57

标签: c# .net asp.net

很长的问题;

如何在C#中执行以下操作:

打开网页(最好不可见) 检查页面是否重定向到其他页面(站点已关闭,404等) 检查标题是否不等于所述字符串

然后单独,(他们需要点击确认按钮)

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

我确实在谷歌上看了很久,并没有发现任何类似于我需要的内容。

你是否给我一个指向这个编程领域或实际源代码的教程的网站链接对我没有任何影响。

3 个答案:

答案 0 :(得分: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;
显然你的xpath可以(也可能应该)更复杂:)你可以在xpath here上找到更多信息

在类似的说明中,您可以在xml上使用xpath,找到链接并选择第一个:

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

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

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

让它在浏览器中打开。这方面的一个很好的方面是它将打开浏览器是客户端的默认设置。它确实有安全隐患,你应该确保它是一个url而不是exe文件或其他东西。

另外,html可能会为其元素使用不同的大写字母,在寻找linsk时你必须处理它

答案 1 :(得分: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());
}

答案 2 :(得分: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");

然后,您可以按如下方式实现处理程序,并根据需要与WebBrowser ui交互... DocumentText属性包含当前加载的网页的HTML:

private void webBrowser1_IDontKnow(object sender, WebBrowserNavigatingEventArgs e)

   {

      CheckHTMLConfirmAndRedirect(webBrowser1.DocumentText);

    }