如何解决Invoke-WebRequest 不返回标签 https://groceries.asda.com/search/jack%20daniels 的 Chrome 网络跟踪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
以上应返回位于其网站上的任何 a
标记内部文本,但它返回空白。例如它应该返回这个:
Jack Daniel's Old No. 7 Tennessee Whiskey
解决方法
当您在浏览器中导航到 https://groceries.asda.com/search/jack%20daniels 时,它不只是加载单个平面 html 页面 - 该特定站点以包含浏览器执行的一堆 JavaScript 的基本“骨架”页面进行响应发出数十个(数百个?)额外请求以加载实际页面内容并显示产品(如果您禁用 javascript,您将只看到基本页面)。
相比之下,Invoke-WebRequest
只发出一个页面请求,在您的情况下,它只是在您提供的确切 url 处检索“骨架”页面内容 - 它不会模拟浏览器并运行加载的 javascript页面的其余部分。那时产品标签甚至不存在于文档中,这就是它找不到它们的原因。
如果您想检索产品详细信息,您要么需要确定返回给定搜索词的产品结果的正确网址是什么,或必须模拟浏览器来执行框架页面中的 javascript 并自动发出所有额外请求(例如使用 Selenium)来构建完整页面。
不幸的是,这都不是一项微不足道的任务:-(
https://groceries.asda.com/search/jack%20daniels 的 Chrome 网络跟踪
Invoke-WebRequest -Uri "https://groceries.asda.com/search/jack%20daniels"
的 Fiddler 跟踪
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。