如何在不下载c#中的整个html的情况下提取一系列URL的元标记

时间:2016-06-21 06:00:40

标签: c# html asp.net metadata html-agility-pack

我想提取网址的标题,描述和关键字 我有这段代码

 WebClient x = new WebClient();
 string  pageSource = (x.DownloadString(url));     
 query.title = Regex.Match(pageSource, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value;

但我不想下载整个页面,因为它对于一系列URL来说非常耗时。有没有办法在不下载整页的情况下获取这些信息? 我应该提一下,我在谷歌搜索结果页面中获取这些URL,向谷歌购买发送查询。

1 个答案:

答案 0 :(得分:2)

您可以通过指定范围标题,使用HttpClient请求和下载部分结果。您可以定义要下载和读取的缓冲区长度:

    static void Main()
    {
        Test().GetAwaiter().GetResult();
    }

    private static async Task Test()
    {
        const string url = "http://google.com";
        const int bytesToRead = 2000;

        using (var httpclient = new HttpClient())
        {
            httpclient.DefaultRequestHeaders.Range = new RangeHeaderValue(0, bytesToRead);

            var response = await httpclient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);

            using (var stream = await response.Content.ReadAsStreamAsync())
            {
                var buffer = new byte[bytesToRead];
                stream.Read(buffer, 0, buffer.Length);

                var partialHtml = Encoding.UTF8.GetString(buffer);
                //extract required info from partial html
            }
        }
    }

使用&#34; old&#34;可以实现相同的结果。 WebClient