Invoke-WebRequest 不返回标记
Invoke-WebRequest not returning tag
我正在尝试抓取网站,但 Invoke-WebRequest
未显示 a
标签。请看以下代码:
$url = "https://groceries.asda.com/search/jack%20daniels"
$url.ParsedHtml.all.tags("a") | forEach-Object -MemberName innertext
上面应该 return 位于他们网站上的任何 a
标签内部文本,但是 return 是空白的。例如它应该 return 这个:
Jack Daniel's Old No. 7 Tennessee Whiskey
当您在浏览器中导航到 https://groceries.asda.com/search/jack%20daniels 时,它不仅会加载一个单一的平面 html 页面 - 该特定站点会以包含一堆内容的基本“骨架”页面进行响应浏览器执行的 javascript 发出数十个(数百个?)额外请求以加载实际页面内容并显示产品(如果禁用 javascript,您只会看到基本页面) .
相比之下,Invoke-WebRequest
只发出一个页面请求,在您的情况下,它只是在您提供的 url 准确检索“骨架”页面内容 - 它不模拟浏览器运行 加载页面其余部分的 javascript。那时产品标签甚至不存在于文档中,这就是它找不到它们的原因。
如果您想检索产品详细信息,您要么需要找出正确的 url 是什么 returns 给定搜索词的产品结果, 或 你将不得不模拟浏览器来执行骨架页面中的 javascript 并自动发出所有额外的请求(例如使用 Selenium)来构建完整的页面。
不幸的是,这两者都不是一项微不足道的任务:-(
Chrome https://groceries.asda.com/search/jack%20daniels
的网络跟踪
Invoke-WebRequest -Uri "https://groceries.asda.com/search/jack%20daniels"
的 Fiddler 跟踪
我正在尝试抓取网站,但 Invoke-WebRequest
未显示 a
标签。请看以下代码:
$url = "https://groceries.asda.com/search/jack%20daniels"
$url.ParsedHtml.all.tags("a") | forEach-Object -MemberName innertext
上面应该 return 位于他们网站上的任何 a
标签内部文本,但是 return 是空白的。例如它应该 return 这个:
Jack Daniel's Old No. 7 Tennessee Whiskey
当您在浏览器中导航到 https://groceries.asda.com/search/jack%20daniels 时,它不仅会加载一个单一的平面 html 页面 - 该特定站点会以包含一堆内容的基本“骨架”页面进行响应浏览器执行的 javascript 发出数十个(数百个?)额外请求以加载实际页面内容并显示产品(如果禁用 javascript,您只会看到基本页面) .
相比之下,Invoke-WebRequest
只发出一个页面请求,在您的情况下,它只是在您提供的 url 准确检索“骨架”页面内容 - 它不模拟浏览器运行 加载页面其余部分的 javascript。那时产品标签甚至不存在于文档中,这就是它找不到它们的原因。
如果您想检索产品详细信息,您要么需要找出正确的 url 是什么 returns 给定搜索词的产品结果, 或 你将不得不模拟浏览器来执行骨架页面中的 javascript 并自动发出所有额外的请求(例如使用 Selenium)来构建完整的页面。
不幸的是,这两者都不是一项微不足道的任务:-(