【问题标题】:Invoke-WebRequest not returning tagInvoke-WebRequest 不返回标签
【发布时间】:2021-07-22 05:28:14
【问题描述】:

我正在尝试抓取一个网站,但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

【问题讨论】:

    标签: powershell web-crawler invoke-webrequest


    【解决方案1】:

    当您在浏览器中导航到 https://groceries.asda.com/search/jack%20daniels 时,它不仅会加载单个平面 html 页面 - 该特定站点会以包含浏览器执行以生成的一堆 javascript 的基本“骨架”页面进行响应数十个(数百个?)额外请求以加载实际页面内容并显示产品(如果禁用 javascript,您将只看到基本页面)。

    相比之下,Invoke-WebRequest 只发出一个页面请求,在您的情况下,它只是在您提供的确切 url 处检索“骨架”页面内容 - 它不会模拟浏览器并运行加载其余部分的 javascript的页面。那时产品标签甚至不存在于文档中,这就是它找不到它们的原因。

    如果您想检索产品详细信息,您要么需要找出返回给定搜索词的产品结果的正确 URL,要么必须模拟浏览器来执行骨架页面中的 javascript,并自动发出所有额外的请求(例如使用 Selenium)来构建完整的页面。

    不幸的是,这两个任务都不是微不足道的:-(

    https://groceries.asda.com/search/jack%20daniels 的 Chrome 网络跟踪

    Invoke-WebRequest -Uri "https://groceries.asda.com/search/jack%20daniels" 的 Fiddler 跟踪

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2022-12-07
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      相关资源
      最近更新 更多