【问题标题】:How do I crawl an infinite-scrolling page?如何抓取无限滚动的页面?
【发布时间】:2012-10-21 09:00:32
【问题描述】:

我正在尝试构建一个从无限滚动页面中抓取内容的东西。但是,我无法从第一个“休息”下方获得这些东西。我该怎么做?

【问题讨论】:

  • 我们必须知道无限滚动是如何实现的才能回答您的问题。它可能是使用 AJAX 调用完成的。这意味着如果你的爬虫是用像 ruby​​ 这样的服务器端语言编写的,你需要一个 wqy 来在那个页面上执行 te javascript。

标签: javascript ruby web-crawler


【解决方案1】:

无限滚动几乎总是在 JavaScript 中使用 AJAX 或相关技术完成。因此,您的网络爬虫仅获取 HTML 并对其进行解析是不够的;它必须下载并执行 javascript,或者至少扫描它以查找 AJAX 调用。

执行完整的 javascript 可能是最好的(即最能保证工作),但可能是最难做到的。

扫描 javascript 中的 AJAX 请求和/或寻找执行 AJAX 调用然后进行 DOM 操作的函数可能是最简单的(相对于完整的 JS 执行)

【讨论】:

  • 谢谢。由于我是一个相对新手,你能举个例子来说明如何做到这一点吗?
  • 这不是一件简单的事情。但是,无论您如何编写爬虫来接收 HTML 并对其进行解析,让它查找 script 标签,从 src 属性中获取 url,然后下载 JS 并扫描 xmlhttp 等等。
  • 甚至扫描 xmlhttp 也可能变得复杂,因为它可能被另一个函数调用。因此,假设您找到了 $.ajax 使用的 xmlhttp 调用,现在您必须回到调用 $.ajax 的地方,这可能是用户定义的不同函数。简而言之,您必须遍历整个调用堆栈才能找到正在下载的资源的 url,但是更麻烦的是,url 可以动态构建。为了解决这个问题,谷歌依靠网站管理员添加特定的标记来允许对 ajax 页面的抓取,
  • 查看此链接以获取有关 google 抓取此类页面方式的更多信息:查看此处:developers.google.com/webmasters/ajax-crawling/docs
【解决方案2】:

这个答案应该与大部分无限滚动器相关,显然你的里程可能会有所不同。

大多数无限滚动条通过使用偏移位置来工作,并从偏移处抓取下一个项目块。这与单步执行分页的工作方式完全相同

< Previous 1 2 3 4 5 Next > 除了存储偏移量并用于发出新请求。

考虑到这一点,如果您在 Chrome 或 Firefox 中打开开发人员工具栏并查看网络选项卡,您很可能会在向下滚动时看到请求进入。

查看请求中的参数,您很可能会看到类似的内容

GET /api/v2/books?offset=100=count=10
GET /api/v2/books?offset=110=count=10
GET /api/v2/books?offset=120=count=10

知道了这一点,您就可以很容易地忽略对目标 HTML 的实际抓取,而只需使用它们的内部目标 URI 来发出您的请求。

【讨论】:

    【解决方案3】:

    ajax 请求与任何其他请求没有什么不同。您只需发出请求,解析结果,就可以得到您的数据。

    如果您以前没有做过,可能需要一些经验,但这听起来是一次很好的学习体验。

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 2021-12-10
      相关资源
      最近更新 更多