ruby - 使用 Anemone 和 nokogiri 进行屏幕抓取需要帮助

标签 ruby screen-scraping nokogiri

我的起始页为 http://www.example.com/startpage它有 1220 个列表,按标准方式分页,例如每页 20 个结果。

我有代码可以解析结果的第一页,并跟踪在其 url 中包含“example_guide/paris_shops”的链接。然后我使用 Nokogiri 提取最后一页的特定数据。一切正常,20 个结果写入文件。

但是我似乎无法弄清楚如何让 Anemone 爬到下一页结果 (http://www.example.com/startpage?page=2) 然后继续解析该页面并然后是第 3 页 (http://www.example.com/startpage?page=3) 等等。

所以我想问问有没有人知道如何让 Anemone 在一个页面上开始,解析该页面上的所有链接(以及特定数据的下一级数据)然后按照分页到下一个结果页面,这样 Anemone 就可以再次开始解析等等。鉴于分页链接与结果中的链接不同,Anemone 当然不会关注它们。

目前我正在加载结果第一页的 url,让它完成,然后粘贴到结果第二页的下一个 url 等等。非常手动且效率低下,尤其是对于获取数百页。

如有任何帮助,我们将不胜感激。

require 'rubygems'
require 'anemone'
require 'nokogiri'
require 'open-uri'

Anemone.crawl("http://www.example.com/startpage", :delay => 3) do |anemone|
  anemone.on_pages_like(/example_guide\/paris_shops\/[^?]*$/) do | page |

doc = Nokogiri::HTML(open(page.url))

name = doc.at_css("#top h2").text unless doc.at_css("#top h2").nil?
address = doc.at_css(".info tr:nth-child(3) td").text unless doc.at_css(".info tr:nth-child(3) td").nil?
website = doc.at_css("tr:nth-child(5) a").text unless doc.at_css("tr:nth-child(5) a").nil?

open('savedwebdata.txt', 'a') { |f|
  f.puts "#{name}\t#{address}\t#{website}\t#{Time.now}"
}
  end
end

最佳答案

实际上 Anemone 内置了 nokogiri 文档。如果你调用 page.doc 那是一个 nokogiri 文档所以不需要有两个 nokogiri 文档

关于ruby - 使用 Anemone 和 nokogiri 进行屏幕抓取需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3836597/

相关文章:

jquery - 我如何重新加载带有 rails partial 的 div

ruby-on-rails - 基于 Mechanize 提取职业,员工网址

ruby - :/mean in Ruby? 是什么意思

php - xpath 屏幕抓取的意外输出

ruby - 如何使用 Nokogiri 获取 <p> 标签父类名称?

ruby - 如何清理 Capybara/Cucumber 场景之间的状态?

iphone - 如何从另一个网站(如 osx 仪表板)创建功能的 UIWebView

php - 这个符号.*是什么?在 PHP 中表示(HTML 解析)

ruby-on-rails - 如何按属性值搜索

ruby - 安装带有 Rails : "Could not find "Nokogiri. 的 Nokogiri Gem 的问题 .."