3

我正在使用 Nokogiri 解析 TechCrunch [带有特定搜索词。

http://techcrunch.com/search/education#stq=education&stp=1

问题是该站点在返回与搜索项相关的列表之前有几秒钟的延迟,因此当 Nokogiri 检索时,我输入给 Nokogiri 解析的 URL 是空的相关内容。

内容似乎会在几秒钟后动态加载-我猜是Javascript。关于如何稍微延迟检索 HTML 的任何想法?

4

1 回答 1

3

使用 Ruby 方法,sleep

seconds_to_delay = 5
sleep seconds_to_delay

编辑 1:处理在文档完成加载后一段时间加载的 div

我讨厌这种情况。我必须处理完全相同的场景,所以这就是我解决它的方法。您需要使用selenium-webdriver gem 之类的东西。

require 'selenium-webdriver'
url = "http://techcrunch.com/search/education#stq=education&stp=1"

css_selector = ".tab-panel.active"

driver = Selenium::WebDriver.for :firefox
driver.get(url)
driver.switch_to.default_content
posts_text = driver.find_element(:css, css_selector).text
puts posts_text
driver.quit

如果你在 Heroku、AWS EC2 或 Digital Ocean 等虚拟机上运行它,你就不能使用 firefox。相反,您需要像 phantom.js 这样的无头浏览器。

为了使用 phantom.js 而不是 firefox,首先,在 VM 上安装 phantomjs。然后更改为driver = Selenium::WebDriver.for :phantomjs.

您可以使用这个为您实际安装 phantomjs 的 gem。


问题 b) 的第二次编辑

require 'selenium-webdriver'
url = "http://techcrunch.com/search/education#stq=education&stp=1"

css_selector = ".tab-panel.active ul.river-compact.river-search li"

driver = Selenium::WebDriver.for :phantomjs
driver.get(url)
driver.switch_to.default_content
items = driver.find_elements(:css, css_selector)
items.each {|x| puts x }
driver.quit
于 2013-11-12T22:03:31.737 回答