Как проанализировать страницу поиска Google, чтобы получить статистику результатов и счет AdWords с помощью Nokogiri - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь очистить страницу поиска 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

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

Использование 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"]' неоправданно многословен.

Нокогири достаточно умен, чтобы знать, когда использовать CSS, когда смотрит на селектор; За многие годы его использования я обманул его только один раз и был вынужден использовать спецификации CSS / XPath c версий обобщенных c search или at методов. Используя методы c, вы можете изменить селектор между CSS и XPath, не заботясь о вызываемом методе. " Использование 'at', 'search' и их братьев и сестер " говорит об этом.

Кроме того, просто ради интереса, у Nokogiri должны быть все jQuery расширения для CSS как это были дорожные карты v2.0 для Nokogiri .

1 голос
/ 20 марта 2020

Вам нужно использовать Selenium WebDriver для получения динамического c контента. Один только Нокогири не может разобрать его.

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
...