【发布时间】:2017-11-12 20:11:45
【问题描述】:
我知道如何使用 Nokogiri 查找元素。我知道如何使用 Mechanize 点击链接。但我不知道如何找到特定链接并单击它。这看起来应该很容易,但由于某种原因我找不到解决方案。
假设我只是想点击 Google 搜索的第一个结果。我不能只点击 Mechanize 的第一个链接,因为 Google 页面还有很多其他链接,比如设置。搜索结果链接本身好像没有类名,但是被<h3 class="r"></h3>包裹住了。
我可以使用 Nokogiri 来跟踪链接的 href 值,如下所示:
document = open("https://www.google.com/search?q=stackoverflow")
parsed_content = Nokogiri::HTML(document.read)
href = parsed_content.css('.r').children.first['href']
new_document = open(href)
# href is equal to "/url?sa=t&rct=j&q=&esrc=s&source=web&url=https%3A%2F%2Fstackoverflow.com%2F"
但这不是一个直接的 url,去那个 url 会出错。 data-href 值是直接 url,但我不知道如何获取该值 - 做同样的事情,除了 ...first['data-href'] 返回 nil。
有谁知道我怎样才能找到页面上的第一个 .r 元素并单击其中的链接?
这是我行动的开始:
require 'open-uri'
require 'nokogiri'
require 'mechanize'
document = open("https://www.google.com/search?q=stackoverflow")
parsed_content = Nokogiri::HTML(document.read)
这是 Google 搜索结果页面上的 .r 元素:
<h3 class="r">
<a href="/url?sa=t&rct=j&q=&esrc=s&source=web&url=https%3A%2F%2Fstackoverflow.com%2F" data-href="https://stackoverflow.com/">Stack Overflow</a>
</h3>
【问题讨论】:
标签: ruby nokogiri bots mechanize open-uri