【问题标题】:Scraping/Parsing Google search results in Ruby在 Ruby 中抓取/解析 Google 搜索结果
【发布时间】:2010-12-05 02:49:38
【问题描述】:

假设我拥有 Google 搜索结果页面的整个 HTML。有谁知道任何现有的代码(Ruby?)来抓取/解析谷歌搜索结果的第一页?理想情况下,它可以处理随处可见的购物结果和视频结果部分。

如果不是,一般来说,最好的基于 Ruby 的屏幕抓取工具是什么?

澄清一下:我知道以编程方式/API 方式获取 Google 搜索结果很困难/不可能,而且简单地卷曲结果页面存在很多问题。在stackoverflow上对这两点都有共识。我的问题不同。

【问题讨论】:

  • 我建议看看 Google 排名检查器 (google-rank-checker.squabbel.com)。它不是红宝石,它是用 PHP 编写的。但它是开源的,可以解决您需要的所有任务。您似乎并没有真正固定在 ruby​​ 上,我个人将 PHP(控制台脚本)用于许多此类项目(也在生产环境中)。无论如何,即使您使用 ruby​​ 编写代码,您也会发现 PHP 代码很有用,因为在抓取 Google 时可能会非常棘手(延迟、IP、DOM 解析、发送正确的 GET 参数等)。
  • 这是一个老问题,所以任何使用它来证明使用抓取而不是谷歌 API 的人都需要重新考虑他们的逻辑。使用 API,这就是它的用途。
  • 改用“Google Custom Search”。

标签: ruby google-search google-search-api


【解决方案1】:

这应该是很简单的事情,看看 Ryan Bates 的“Screen Scraping with ScrAPI”屏幕。你仍然可以不抓取库,只需坚持Nokogiri 之类的东西。


来自Nokogiri的documentation

require 'nokogiri'
require 'open-uri'

# Get a Nokogiri::HTML:Document for the page we’re interested in...

doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))

# Do funky things with it using Nokogiri::XML::Node methods...

####
# Search for nodes by css
doc.css('h3.r a.l').each do |link|
  puts link.content
end

####
# Search for nodes by xpath
doc.xpath('//h3/a[@class="l"]').each do |link|
  puts link.content
end

####
# Or mix and match.
doc.search('h3.r a.l', '//h3/a[@class="l"]').each do |link|
  puts link.content
end

【讨论】:

  • 您可以通过link['href'] 获取链接的href ;)。
  • Ryan 在上面提到的 ScrAPI 和 one on Nokogiri 上有两个截屏视频,它使用的代码与此答案中的代码更相似。
  • 看来google改变了页面布局,这段代码已经失效了。
【解决方案2】:

您应该能够通过Mechanize 轻松实现您的目标。

如果您已经有了结果,您只需要HpricotNokogiri

【讨论】:

  • 不客气!看看我的更新:如果你已经有了结果,Mechanize 可能是矫枉过正。
  • Hpricot 不再受支持,所以不要去那里。 Nokogiri 活得很好,并且确实支持 Hpricot 的语法,但不要使用它,使用普通的 Nokogiri 语法,如 cheet-sheet 和教程中所示。
  • 不幸的是,由于谷歌越来越多的页面使用 DHTML,抓取比以前更加困难。而是使用“Google Custom Search”。
【解决方案3】:

我不清楚您为什么首先要进行屏幕抓取。也许 REST 搜索 API 会更合适?它将以 JSON 格式返回结果,这将更容易解析并节省带宽。

例如,如果您的搜索是“foo bar”,您只需向 http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=foo+bar 发送 GET 请求并处理响应。

有关详细信息,请参阅“Google Search REST API”或Google's developer page

【讨论】:

【解决方案4】:

我建议 HTTParty + Google 的 Ajax 搜索 API。

【讨论】:

  • 正如所写,这几乎不是一个答案。指向适当的页面,通过一些代码示例说明为什么它是一个有用的答案。
【解决方案5】:

我不知道 Ruby 特定的代码,但这个 google scraper 可以帮助你。这是一个在线工具演示,可用于抓取和解析 Google 结果。最有趣的是那里的文章解释了 PHP 的解析过程,但它适用于 Ruby 和任何其他编程语言。

【讨论】:

  • 此时它只显示一个无穷无尽的验证码列表来解决。
【解决方案6】:

随着 Google 在扩展结果结构(丰富的 sn-ps、知识图、直接答案等)的同时不断变化,报废变得越来越难,我们构建了一个服务来处理这种复杂性的一部分,我们确实有Ruby library。使用起来非常简单:

query = GoogleSearchResults.new q: "coffee"

# Parsed Google results into a Ruby hash
hash_results = query.get_hash

【讨论】:

猜你喜欢
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多