doc.xpath('//img') #this will get some results doc.xpath('//img[@class="productImage"]') #and this gets nothing at all doc.xpath('//div[@id="someID"]') # and this won't work either
Я не знаю, что здесь пошло не так, я дважды проверил источник HTML. Существует множество тегов img, которые содержат атрибут (class = "productImage").
Как будто селектор атрибутов просто не будет работать.
Вот URL-адрес источника HTML.
http://www.amazon.cn/s/ref=nb_sb_ss_i_0_1?__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99&url=search-alias%3Daps&field-keywords=%E4%B8%93%E5%85%AB&x=0&y=0&sprefix=%E4%B8%93
Пожалуйста, сделайте мне одолжение, если у вас есть свободное время. Разберите HTML-контент, как я вижу, можете ли вы решить эту проблему
Странная вещь, если вы используете open-uri на этой странице, вы получите другой результат, чем при использовании чего-то вроде curl или wget.
open-uri
curl
wget
Однако, когда вы меняете User-Agent, вы, вероятно, получаете, вероятно, нужную страницу:
User-Agent
Анализ :
require 'rubygems' require 'nokogiri' require 'open-uri' require 'pp' URL = 'http://www.amazon.cn/...' def analyze_html(file) doc = Nokogiri.HTML(file) pp doc.xpath('//img').map { |i| i[:class] }.compact.reject(&:empty?) puts doc.xpath('//div').map { |i| i[:class] }.grep(/productImage/).count puts doc.xpath('//div[@class="productImage"]//img').count pp doc.xpath('//div[@class="productImage"]//img').map { |i| i[:src] } end puts "Attempt 1:" analyze_html(open(URL)) puts "Attempt 2:" analyze_html(open(URL, "User-Agent" => "Wget/1.10.2"))
Вывод :
Attempt 1: ["default navSprite"] 0 0 [] Attempt 2: ["default navSprite", "srSprite spr_kindOfSortBtn"] 16 16 ["http://ec4.images-amazon.com/images/I/51fOb3ujSjL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/513UQ1xiaSL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/41zKxWXb8HL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/51bj6XXAouL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/516GBhDTGCL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/51ADd3HSE6L._AA115_.jpg", "http://ec4.images-amazon.com/images/I/51CbB-7kotL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/51%2Bw40Mk51L._AA115_.jpg", "http://ec4.images-amazon.com/images/I/519Gny1LckL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/51Dv6DUF-WL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/51uuy8yHeoL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/51T0KEjznqL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/419WTi%2BdjzL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/51QTg4ZmMmL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/51l--Pxw9TL._AA115_.jpg", "http://ec4.images-amazon.com/images/I/51gehW2qUZL._AA115_.jpg"]
Решение :
User-Agent: Wget/1.10.2
xpath('//div[@class="productImage"]//img')