【问题标题】:How to get the div tag that is loaded after sometime using Nokogiri如何获取使用 Nokogiri 一段时间后加载的 div 标签
【发布时间】:2020-07-06 01:40:50
【问题描述】:

我一直在尝试使用 Nokogiri 进行网络抓取。

可能由于 JavaScript,我想在一段时间后加载内容。我尝试过使用sleep,但我不知道我哪里出错了。

这里是sn-p:

require 'nokogiri'
require "open-uri"
require 'json'

url='https://www.instagram.com/someuser/'
file = Nokogiri::HTML(open(url))
sleep 600
puts file
data = JSON.parse file
links=file.css('div.v1Nh3 a')
puts links

我没有得到任何链接。

【问题讨论】:

  • Nokogiri 不是 JavaScript 解析器,它仅适用于 HTML/XML 或 XML 派生数据。在命令行中使用wgetcurlnokogiri 来查看正在解析的实际源代码。 sleep 无济于事,您必须使用基于 Watir 的工具之一或类似的工具。
  • 另见stackoverflow.com/a/19714636/128421,它描述了从 DHTML 中挑选数据的过程。有时这就是我们所需要的。
  • 另外,请使用tour 并阅读“How to Ask”及其链接页面。语法对 SO 很重要。我建议您在写问题时运行语法检查器。
  • 当然,我会调查的。另外你能帮我解决一个关于如何使用 nokogiri 从 instagram 请求所有数据而不仅仅是 10 个数据的疑问吗?
  • Instagram 可能有一个 API,因此,如果他们有,请使用它,不要尝试抓取页面。抓取非常容易出错,而且非常老派。 API 干净、高效,以及您应该如何做。

标签: ruby-on-rails ruby web-scraping nokogiri


【解决方案1】:

您要查找的内容必须通过 jQuery 或 AJAX 加载,我认为 Nokogiri 无法处理。

您应该查看“Watir”gem 并使用它在浏览器中打开 URL,然后您可以使用 Nokogiri 对其进行解析。

【讨论】:

  • 只有 nokogiri 使用睡眠是不可能的??
  • 不,不是。数据不会存在于 HTML 中,它是在浏览器加载页面后加载的,运行 JavaScript,然后向服务器发出第二次请求以获取该有效负载。 sleep 只是暂停脚本,与解析无关。我建议研究 AJAX 的工作原理。 en.wikipedia.org/wiki/Ajax_(programming)。 WATIR 告诉浏览器加载页面,然后处理 JavaScript,然后它向浏览器询问包含呈现的最终信息的页面的 HTML。该内容可能与最初的 HTML 大相径庭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 2016-09-06
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
相关资源
最近更新 更多