2011-08-01 7 views
1

私は与えられたhtmlのheadセクションで宣言されたすべてのスクリプトを取得しようとしていますが、どうしようもなく常にnilを返します。nokogiri doc.xpath( 'head')はnilを返します

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 

お勧めはありますか?私はあなたのために間違って何が起こっているかわからないんだけど

doc.at('body') 

:私はスクリプト/コンソールでそれをしようとしたとき

答えて

6

ページのDOCTYPEが有効ではありませんので、鋸山が不適切にページを解析します。問題への迅速かつ非効率的な修正:

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") 
+0

それは完全に働いた。 doctypeを変更した後、私はxpathを使ってdom要素に行きました。 –

1

[OK]を、私は確かに便利なものを得ることができます。

htmlヘッドの場合、head要素を取得できません。 htmlはうまく動作しますが、いずれかの方法では動作しません。

私は、ウォルマートのページに何か不具合があると思います。私は同じことをやってみた

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

それはうまくいきました。 ページの一部にアクセスするのをやめさせるために何をしているのか分からない限り、わかりません。

あなたがドキュメントからすべてのスクリプトを扱うことができれば、私はこの1つだけで正常に動作していることが見つかりました:

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

True! //スクリプトを使って呼び出すと、ページ上のすべてのスクリプトを取得しますが、// head/scriptのようなxp​​athを与えようとすると、誰も見つけられません。 –

関連する問題