我正在使用以下代码下载给定的网页。
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。有谁知道那把戏是什么?
答案 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等其他工具将页面下载到渲染引擎中,然后抓取所需内容。