ruby - 从 Mechanize/Nokogiri 获取链接

标签 ruby nokogiri mechanize

我正在尝试找到从 Nokogiri 节点检索 a href 链接的最佳方法。这就是我现在的位置

mech = Mechanize.new 
mech.get(HOME_URL) 

mech.page.search('.listing_content').each do |business| 
  website = business.css('.website-feature')
  puts website.class
  puts website.inner_html
end

输出=>

Nokogiri::XML::NodeSet
<a href="http://urlofsite.com" class="track-visit-website no-tracks"  onclick='omniture.callClick({"eVar6":6,"eVar9":1,"eVar21":"search_results","eVar50":null,"prop17":"cars","prop26":"64c15af0-a558-012f-a041-00215a4685f6","eVar42":"64c15af0-a558-012f-a041-00215a4685f6","prop27":6,"prop38":"search_results","prop39":1,"prop46":null,"events":"event6,event7","eVar51":optimostIDs.trialID.toString(),"eVar52":optimostIDs.segmentID.toString(),"eVar53":optimostIDs.creativeID.toString(),"eVar54":optimostIDs.subjectID.toString(),"prop47":null,"prop51":optimostIDs.trialID.toString(),"prop52":optimostIDs.segmentID.toString(),"prop53":optimostIDs.creativeID.toString(),"prop54":optimostIDs.subjectID.toString(),"prop56":"Saint+George%2C+UT","prop57":null,"prop58":false,"prop59":null,"eVar60":"relevancyTest2","prop60":"relevancyTest2","prop61":false,"prop62":null,"prop64":null,"prop67":null,"prop68":null,"prop70":null,"prop71":null});; atti_logs.attiClick({"iid":"651691e0-a558-012f-2ca7-18a9053c171a","lt":6,"ptid":"www.yellowpages.com","rid":"vendetta-236e7298-3a4f-4744-8ff5-4eb5fcc8e188","ypid":3848879,"lid":3848879,"vrid":"64c15af0-a558-012f-a041-00215a4685f6","nav":null});' rel="nofollow" target="_blank" title="Executive Service Ctr Website"><span class="raquo">»</span>  Website</a>

基本上,我只需要从 inner_html 中获取 http://urlofsite.com,但我不知道该怎么做。我已经读过有关使用 CSS 和 XPATH 进行此操作的信息,但目前我无法让其中任何一个工作。感谢您的帮助

最佳答案

首先,告诉 Nokogiri 获取一个节点,而不是 NodeSet。 at_css将检索节点和 css检索一个 NodeSet,它类似于一个数组。

而不是:

website = business.css('.website-feature')

尝试:

website = at_css('a.track-visit-website no-tracks')

检索 <a> 的第一个实例节点 class="website-feature" 。如果它不是您想要的第一个实例,那么您需要通过获取 NodeSet 然后对其进行索引来缩小范围。如果没有周围的 HTML,就很难提供更多帮助。

获取href来自节点的参数,只需将节点视为哈希:

website['href']

应该返回:

http://urlofsite.com

这是 IRB 的一个小样本:

irb(main):001:0> require 'nokogiri'
=> true
irb(main):002:0> 
irb(main):003:0*   html = '<a class="this_node" href="http://example.com">'
=> "<a class=\"this_node\" href=\"http://example.com\">"
irb(main):004:0> doc = Nokogiri::HTML.parse(html)
=> #<Nokogiri::HTML::Document:0x8041e2ec name="document" children=[#<Nokogiri::XML::DTD:0x8041d20c name="html">, #<Nokogiri::XML::Element:0x805a2a14 name="html" children=[#<Nokogiri::XML::Element:0x805df8b0 name="body" children=[#<Nokogiri::XML::Element:0x8084c5d0 name="a" attributes=[#<Nokogiri::XML::Attr:0x80860170 name="class" value="this_node">, #<Nokogiri::XML::Attr:0x8086047c name="href" value="http://example.com">]>]>]>]>
irb(main):005:0> 
irb(main):006:0*   doc.at_css('a.this_node')['href']
=> "http://example.com"
irb(main):007:0> 

关于ruby - 从 Mechanize/Nokogiri 获取链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11279303/

相关文章:

ruby-on-rails - 通过 Capistrano 部署应用程序失败,LoadError : cannot load such file -- nokogiri

ruby - 如何使用 Nokogiri 从 HTML 中删除不需要的标签?

ruby - Nokogiri/Xpath 命名空间查询

html - 如何使用 Nokogiri 使用 CSS 选择器逐行解析?

python - 为什么我的网络爬虫不进入下一个包含关键字的链接

perl - 屏幕抓取 : Automating a vim script

sql - Rails 查询到 SQL 语句

php - 检索许多记录时 Rails 与 CodeIgniter 的性能对比

ruby-on-rails - 没有要加载的文件 -- bundler/setup

java - 从 Ruby 的角度看 Java