为什么WebClient下载的HTML与Chrome的“查看源代码”页面不同?

时间:2018-12-03 20:34:30

标签: c# webclient dynamic-websites

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

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浏览器实际上在您运行查看页面源代码时运行脚本,否则似乎正在使用其他技巧来获取所有HTML。有谁知道那把戏是什么?

2 个答案:

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

答案 1 :(得分:0)

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

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