我正在尝试使用以下代码来抓取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
您对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;在使用它的很多年中,我仅愚弄了一次,被迫使用通用的search
或at
方法的CSS / XPath特定版本。通过使用通用方法,您可以在CSS和XPath之间更改选择器,而不必担心被调用的方法。 “ Using 'at', 'search' and their siblings”谈论这个。
此外,出于娱乐目的,Nokogiri应该像v2.0 roadmap for Nokogiri一样具有CSS的所有jQuery扩展。
您需要使用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