为什么 WebClient 下载的 HTML 页面与 Chrome 的 "View Source" 页面不同?
Why does the HTML downloaded by WebClient differ from Chrome's "View Source" page?
我正在使用以下代码下载给定的网页。
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 实际上 运行s 脚本当你 运行 查看页面源代码 时,它似乎使用了一些其他技巧来获取所有 HTML。有谁知道这个技巧可能是什么?
可能有一个 ajax 调用或类似的东西来加载页面数据。这是一种现代软件范例,而在页面包含数据之前的所有数据之前。其他人都在说,如果有 javascript 来加载内容,那么 webclient 将无法加载此内容。这就是为什么您在浏览器而不是网络客户端中看到它的原因。
解决方案是使用其他工具(如 Selenium)将页面下载到渲染引擎中,然后抓取您需要的内容。
因此,如果您阅读 WebClient 返回的 HTML,您可以看到一些文本:
We can provide you with the best experience on Yellowpages.com, if you upgrade to the latest version of your browser"
如果您将 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");
我正在使用以下代码下载给定的网页。
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 实际上 运行s 脚本当你 运行 查看页面源代码 时,它似乎使用了一些其他技巧来获取所有 HTML。有谁知道这个技巧可能是什么?
可能有一个 ajax 调用或类似的东西来加载页面数据。这是一种现代软件范例,而在页面包含数据之前的所有数据之前。其他人都在说,如果有 javascript 来加载内容,那么 webclient 将无法加载此内容。这就是为什么您在浏览器而不是网络客户端中看到它的原因。
解决方案是使用其他工具(如 Selenium)将页面下载到渲染引擎中,然后抓取您需要的内容。
因此,如果您阅读 WebClient 返回的 HTML,您可以看到一些文本:
We can provide you with the best experience on Yellowpages.com, if you upgrade to the latest version of your browser"
如果您将 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");