如何使用 Nokogiri 解析 Google 搜索页面以获取结果统计信息和 AdWords 计数

How to parse a Google search page to get result statistics and AdWords count using Nokogiri

我正在尝试抓取 Google 搜索页面以学习抓取,使用如下代码:

doc = Nokogiri::HTML(open("https://www.google.com/search?q=cardiovascular+diesese"))

我想在每个搜索页面中获取结果统计文本:

但是我在解析的HTML中找不到内容的位置。我可以在浏览器中检查页面并看到它在 <div id="result-stats"> 中。我试过这个来找到它:

doc.at_css('[id="result-stats"]').text

您需要使用Selenium WebDriver 来获取动态内容。 Nokogiri 无法单独解析它。

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.get "https://www.google.com/search?q=cardiovascular+diesese"
doc = Nokogiri::HTML driver.page_source
doc.at_css('[id="result-stats"]').text

你对 CSS 的使用很尴尬。考虑一下:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<html>
  <body>
    <div id="result-stats">foo</div>
  </body>
</html>
EOT

doc.at_css('[id="result-stats"]').text # => "foo"
doc.at('#result-stats').text # => "foo"

CSS 使用 # 代替 id,因此 '[id="result-stats"]' 不必要地冗长。

Nokogiri 足够聪明,知道在查看选择器时使用 CSS;在多年的使用过程中,我只骗过它一次,并且被迫使用通用 searchat 方法的 CSS/XPath 特定版本。通过使用通用方法,您可以在 CSS 和 XPath 之间更改选择器,而不必担心被调用的方法。 “Using 'at', 'search' and their siblings”谈到这个。

此外,为了好玩,Nokogiri 应该拥有 CSS 的所有 jQuery 扩展,就像 v2.0 roadmap for Nokogiri.

上的那些一样