0

我正在使用以下代码下载给定的网页。

using (WebClient client = new WebClient())
{
    client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
    using (Stream data = client.OpenRead("https://www.yellowpages.com/south-jordan-ut/plumbers?page=5"))
    using (StreamReader reader = new StreamReader(data))
    {
        string html = reader.ReadToEnd();
    }
}

它有效,但html似乎只包含最后一页的一小部分。我知道这个网站有动态内容,但是当我在 Chrome 中查看源代码时(通过选择查看页面源命令),它似乎下载了所有内容。

除非 Chrome 在您运行View page source时实际运行脚本,否则它似乎正在使用其他技巧来获取所有 HTML。有谁知道这个技巧可能是什么?

4

2 回答 2

2

因此,如果您阅读 webClient 返回的 HTML,您可以看到一些文本:

如果您升级到最新版本的浏览器,我们可以在 Yellowpages.com 上为您提供最佳体验”

如果您将您user-agent的内容更改为Chrome可以发送的内容,您将获得预期的结果:

client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36");
于 2018-12-03T20:47:39.723 回答
1

可能有一个 ajax 调用或类似的东西来加载页面数据。这是一种现代软件范例,而在此之前,页面将包含数据的所有数据。其他人都在说,如果有 javascript 来加载内容,那么 webclient 将无法加载此内容。这就是为什么您在浏览器而不是 Web 客户端中看到它的原因。

解决方案是使用 Selenium 等其他工具将页面下载到渲染引擎中,然后抓取您需要的内容。

于 2018-12-03T20:47:17.387 回答