我重新审视som老码的地雷和具有偶然发现了一个方法得到标题的一个网站基础上,其网址。这不是真的什么你会打电话给一个稳定的方法,因为它往往无法产生结果并有时甚至产生错误的结果。此外,有时无法展示了一些字符从标题为他们的一种替代的编码。

有人建议改进这个旧的版本吗?

public static string SuggestTitle(string url, int timeout)
{
    WebResponse response = null;
    string line = string.Empty;

    try
    {
        WebRequest request = WebRequest.Create(url);
        request.Timeout = timeout;

        response = request.GetResponse();
        Stream streamReceive = response.GetResponseStream();
        Encoding encoding = System.Text.Encoding.GetEncoding("utf-8");
        StreamReader streamRead = new System.IO.StreamReader(streamReceive, encoding);

        while(streamRead.EndOfStream != true)
        {
            line = streamRead.ReadLine();
            if (line.Contains("<title>"))
            {
                line = line.Split(new char[] { '<', '>' })[2];
                break;
            }
        }
    }
    catch (Exception) { }
    finally
    {
        if (response != null)
        {
            response.Close();
        }
    }

    return line;
}

最后一个说明-我会喜欢的代码要跑得更快,因为它是阻挡直到的页面作为被提取,因此,如果我可以得到的只有网站的标题并不是整个网页,这将是巨大的。

有帮助吗?

解决方案

一个更简单的方法来获得内容:

WebClient x = new WebClient();
string source = x.DownloadString("http://www.singingeels.com/");

有一个更简单,更可靠的方式来获得标题:

string title = Regex.Match(source, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>",
    RegexOptions.IgnoreCase).Groups["Title"].Value;

其他提示

也许这个建议,一个新的世界打开了你 我也有这一问题,并来到这个

下载"Html灵活性包",从 http://html-agility-pack.net/?z=codeplex

或者去nuget: https://www.nuget.org/packages/HtmlAgilityPack/ 并添加在这个参考。

添加冬季使用的代码文件:

using HtmlAgilityPack;

写如下因素中的代码methode:

var webGet = new HtmlWeb();
var document = webGet.Load(url);    
var title = document.DocumentNode.SelectSingleNode("html/head/title").InnerText;

资料来源:

https://codeshare.co.uk/blog/how-to-scrape-meta-data-from-a-url-using-htmlagilitypack-in-c/ HtmlAgilityPack获得的标题和元

为了实现这一目标,您需要做几件事。

  • 让您的应用程序线程化,以便您可以同时处理多个请求并最大限度地增加发出的 HTTP 请求的数量。
  • 在异步请求期间,仅下载您想要拉回的数据量,您可能可以在数据返回时对其进行解析以查找
  • 可能想使用正则表达式来提取标题名称

我之前曾使用 SEO 机器人完成过此操作,并且能够一次性处理近 10,000 个请求。您只需要确保每个 Web 请求都可以独立包含在线程中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top