我正试图从网站上获取一些信息,我有一个我为几个不同的网站编写和编辑的脚本,但这个特别令我感到悲伤!
脚本读取类别并构建一个或多个要打开的页面,然后继续打开每个页面,然后它应该从每个类别页面上的每个产品中获取信息。构建阵列的功能仍然可以正常工作,看起来这个网站上的标记是如此不同,它的反应也不同。
我需要阅读此标记
<li>
<a class="product-link" href="http://www.DOMAIN/producturl_1">
<img class='product_image' src="image/path_1.jpg" title="" alt="PRODUCT NAME" /></a>
<a class="product-title" href="http://www.DOMAIN/producturl_1">PRODUCT NAME 1</a>
<span>PRICE</span>
</li><!----><li>
<a class="product-link" href="http://www.DOMAIN/producturl_2">
<img class='product_image' src="image/path_2.jpg" title="" alt="PRODUCT NAME 2" /></a>
<a class="product-title" href="http://www.DOMAIN/producturl">PRODUCT NAME 2</a>
<span>PRICE</span>
</li><!----><li>
<a class="product-link" href="http://www.DOMAIN/producturl_3">
<img class='product_image' src="image/path_3.jpg" title="" alt="PRODUCT NAME 3" /></a>
<a class="product-title" href="http://www.DOMAIN/producturl_3">PRODUCT NAME 3</a>
<span>PRICE</span>
</li><!----><li>
<a class="product-link" href="http://www.DOMAIN/producturl">
<img class='product_image' src="image/path.jpg" title="" alt="PRODUCT NAME" /></a>
<a class="product-title" href="http://www.DOMAIN/producturl">PRODUCT NAME</a>
<span>PRICE</span>
</li>
我的剧本;
每个产品都在<li>
标记
page.css('li').each do |product|
# ...
end
我可以用
取出产品名称product.css('.product-title').text.strip
然后通常抓住产品URL我会定义URL所在的标签并使用类似的东西来获取href和gsub的内容以摆脱换行
product.css('.product-title')[:href].gsub(/\n/,"")
在这种情况下,我正在
./script.rb:52:in []: no implicit conversion of Symbol into Integer (TypeError)
from ./script.rb:52:in block in <main>
from /usr/local/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.3.1/lib/nokogiri/xml/node_set.rb:237:in block in each
from /usr/local/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.3.1/lib/nokogiri/xml/node_set.rb:236:in upto
from /usr/local/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.3.1/lib/nokogiri/xml/node_set.rb:236:in each
from ./script.rb:39:in <main>
如何阅读href
?当它通常适用于不同的网站时,我无法解决为什么它会抛出这个错误。
答案 0 :(得分:1)
product.css('.product-title')
返回NodeSet
,类似于数组。
product.css('.product-title').first['href'] #=> "http://www.DOMAIN/producturl"
product.css('.product-title')[0]['href'] #=> "http://www.DOMAIN/producturl"
或at_css
快捷方式:
product.at_css('.product-title')['href'] #=> "http://www.DOMAIN/producturl"
更完整的例子:
require 'nokogiri'
page = Nokogiri::HTML(<<-HTML)
<li>
<a class="product-link" href="http://www.DOMAIN/producturl">
<img class='product_image' src="image/path.jpg" title="" alt="PRODUCT NAME" />
</a>
<a class="product-title" href="http://www.DOMAIN/producturl">PRODUCT NAME</a>
<span>PRICE</span>
</li>
HTML
page.css('li').each do |product|
puts product.at_css('.product-title')['href']
end
输出:
http://www.DOMAIN/producturl