2015-01-20 3 views
1

Это мой сценарий, написанный, чтобы очистить данные внутри тега с помощью Nokogiri:скребковые данные Iframe с помощью Nokogiri и рубин

require 'nokogiri' 
require 'restclient' 

doc = Nokogiri::HTML(RestClient.get("http://www.sample_site.com/")) 
doc.xpath('//iframe[@width="1001" and @height="973"]').children 

Я получаю так:

=> [#<Nokogiri::XML::Text:0x1913970 "\r\nYour browser does not support inline frames\r\n">] 

Может кто-нибудь сказать мне, почему ?

ответ

0

Вопрос должен быть адресован RestClient, а не Nokogiri.

RestClient не извлекает содержимое iframe s. Вы можете попытаться изучить содержание RestClient.get("http://www.sample_site.com/"), там будет строка вида:

<iframe src="page-1.htm" name="test" height="120" width="600"> 
    You need a Frames Capable browser to view this content. 
</iframe> 

Nokogiri прекрасно дилинг с этим, он возвращает содержимое iframe узла, который по-видимому, единственный TextNode имеющей строку, в результате.

2

iframe Используется для встраивания другого документа в текущий HTML-документ. Это означает, что iframe загружает его контент из внешнего источника, который указан в атрибуте src.

Итак, если вы хотите сделать соскабливание до содержимого iframe, вы должны отправить запрос на внешний источник, откуда он загружает свой контент.

# The iframe (notice the 'src' attribute) 
<iframe src="iframe_source_url" height="973" width="1001"> 
    # iframe content 
</iframe> 

# Code to do the scraping 
doc = RestClient.get('iframe_source_url') 
parsed_doc = Nokogiri::HTML(doc) 
parsed_doc.css('#yourSelectorHere') # or parsed_doc.xpath('...') 

Примечание (об ошибке)

Когда вы выскабливание, клиент HTTP используется выступает в качестве вашего браузера (ваш является restclient). Ошибка говорит, что ваш браузер не поддерживает встроенные фреймы, другими словами, restclient не поддерживает встроенные кадры и поэтому не может загрузить содержимое фрейма.

+1

Я подозреваю, что текстовый ответ является результатом встроенной строки, которая буквально говорит «Ваш браузер не поддерживает встроенные кадры» в HTML. Он не динамически генерируется из-за клиента, он всегда присутствует, и когда браузер, поддерживающий iframes, загружает страницу, скрытую контентом. –

+0

Я не говорю, что он динамически генерируется клиентом, просто, что restclient не поддерживает iframe, поэтому он не может загрузить контент. Но громко это указывает! – Alfonso