nokogiri doc.xpath ('head') возвращает ноль - PullRequest
1 голос
/ 01 августа 2011

Я пытаюсь получить все сценарии, объявленные в разделе заголовка данного html, но как бы я ни старался, он всегда возвращает ноль.

doc = Nokogiri::HTML(open('http://www.walmart.com.br/'))

puts doc.at('body') # returns nill

doc.xpath('//html/head').each # this also will never iterate

Есть предложения?

Ответы [ 2 ]

7 голосов
/ 02 августа 2011

DOCTYPE страницы недействителен, поэтому Nokogiri неправильно анализирует страницу. Быстрое, неэффективное решение проблемы:

require 'nokogiri'
require 'open-uri'
require 'pp'

# Request the HTML before parsing
html = open("http://www.walmart.com.br/").read

# Replace original DOCTYPE with a valid DOCTYPE
html = html.sub(/^<!DOCTYPE html(.*)$/, '<!DOCTYPE html>')

# Parse
doc = Nokogiri::HTML(html)

# Party.
pp doc.xpath("/html/head")
1 голос
/ 01 августа 2011

Хорошо, когда я попробовал это в скрипте / консоли, я действительно мог получить что-то полезное для:

doc.at('body')

, поэтому я не уверен, что у вас там не так.

Для заголовка html я тоже не могу получить элемент head.HTML работает нормально, но в любом случае это не так.

Я думаю, что с этой страницей Walmart что-то пошло не так.Я попытался сделать то же самое для

Nokogiri::HTML(open('http://google.com/')) 

, и это сработало просто отлично.Поэтому, если вы не сможете выяснить, что они делают, чтобы помешать вам получить доступ к частям страницы ... тогда я не знаю.

Если вы сможете разобраться со всеми сценариями из документа, я обнаружил, чтоэтот работает просто отлично:

doc.xpath('//script')
...