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

问题描述 投票:-1回答:2

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

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

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

result-stat

但是我无法在解析的HTML中找到内容的位置。我可以在浏览器中检查该页面,并在<div id="result-stats">中看到它。我试图找到它:

doc.at_css('[id="result-stats"]').text
ruby-on-rails ruby nokogiri
2个回答
0
投票

您对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应该像v2.0 roadmap for Nokogiri一样具有CSS的所有jQuery扩展。


0
投票

您需要使用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
© www.soinside.com 2019 - 2024. All rights reserved.