我正在使用 Nokogiri 解析 TechCrunch [带有特定搜索词。
http://techcrunch.com/search/education#stq=education&stp=1
问题是该站点在返回与搜索项相关的列表之前有几秒钟的延迟,因此当 Nokogiri 检索时,我输入给 Nokogiri 解析的 URL 是空的相关内容。
内容似乎会在几秒钟后动态加载-我猜是Javascript。关于如何稍微延迟检索 HTML 的任何想法?
我正在使用 Nokogiri 解析 TechCrunch [带有特定搜索词。
http://techcrunch.com/search/education#stq=education&stp=1
问题是该站点在返回与搜索项相关的列表之前有几秒钟的延迟,因此当 Nokogiri 检索时,我输入给 Nokogiri 解析的 URL 是空的相关内容。
内容似乎会在几秒钟后动态加载-我猜是Javascript。关于如何稍微延迟检索 HTML 的任何想法?
使用 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