我正在使用Open :: URI和Nokogiri来搜索Google搜索页面:
require 'open-uri'
require 'nokogiri'
url = http://www.google.co.uk/search?&q=toys&start=0&num=&complete=0
doc = Nokogiri::HTML(open(url))
mas = doc.css('li.g')[7]
mas.at_css('.mas-row')
从这个结果我只对一个结果感兴趣:
"Amazon.co.uk: Toys - Harry Potter: Toys & Games"
我希望从"div class mas-row"
获取数据。
我找不到它。我查看了“doc”变量,但无法找到它。 之后我查找了那个“div”中的文本,并且对于第一个div,找到了文本的一部分,但是没有找到下一个div。
任何人都可以帮我吗?
答案 0 :(得分:3)
HTML中包含div
mas-row
。它由JavaScript呈现。
使用可以处理JavaScript的库,例如selenium。
答案 1 :(得分:0)
首先,它不由 JavaScript 呈现。其次,它可能不返回任何内容,因为没有指定 user-agent
。 What is my user-agent
?第三,如果您只想检索一个(first)结果,您可以使用 xpath
和 nokogiri
at_xpath
shortcut,例如:
doc.at_xpath('//*[@id="rso"]/div[1]/div/div/div[1]/a/h3').text
# or exclusively with xpath by adding text()
doc.at_xpath('//*[@id="rso"]/div[1]/div/div/div[1]/a/h3/text()')
代码:
require 'nokogiri'
require 'httparty'
headers = {
"User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"
}
params = {
q: "Amazon.co.uk: Toys - Harry Potter: Toys & Games",
hl: "en"
}
response = HTTParty.get('https://www.google.com/search',
:query => params,
:headers => headers)
doc = Nokogiri::HTML(response.body)
puts doc.at_xpath('//*[@id="rso"]/div[1]/div/div/div[1]/a/h3/text()'),
doc.at_xpath('//*[@id="rso"]/div[1]/div/div/div[1]/a/@href')
---
#=> Harry Potter: Toys & Games - Amazon.co.uk
#=> https://www.amazon.co.uk/Toys-Games-Harry-Potter/s?rh=n%3A468292%2Cp_89%3AHarry+Potter
或者,您可以使用来自 SerpApi 的 Google Organic Results API 来实现此目的。这是一个带有免费计划的付费 API。主要区别之一是您只需要迭代结构化的 json
。
要集成的代码:
require 'google_search_results'
params = {
api_key: ENV["API_KEY"],
engine: "google",
q: "Amazon.co.uk: Toys - Harry Potter: Toys & Games",
hl: "en"
}
search = GoogleSearch.new(params)
hash_results = search.get_hash
# [0] first element from organic results
puts hash_results[:organic_results][0][:title],
hash_results[:organic_results][0][:link]
#=> Harry Potter: Toys & Games - Amazon.co.uk
#=> https://www.amazon.co.uk/Toys-Games-Harry-Potter/s?rh=n%3A468292%2Cp_89%3AHarry+Potter
<块引用>
免责声明,我为 SerpApi 工作。