2010-10-27 3 views
1

Я успешно использовал анализ ruby ​​(1.8) и nokogiri css, чтобы вытащить данные с фронтальной стороны с веб-страниц.Как разобрать html исходный код с ruby ​​/ nokogiri?

Однако теперь мне нужно вытащить некоторые данные из серии страниц, где данные находятся в тегах «meta» в исходном коде страницы.

Одна из линий мне нужно заключается в следующем:

<meta name="geo.position" content="35.667459;139.706256" /> 

Я попытался с помощью XPATH положить не смог получить это право.

Любая помощь относительно того, какой синтаксис необходим, будет очень признательна.

Благодаря

+4

Вы говорите: «Я попытался с помощью XPath положить не смогли получить это право.» ** Покажите нам, что вы пробовали **, чтобы мы могли помочь вам сделать это правильно. –

+0

Thx Andy - просто разные способы сказать «// meta [blah]» и т. Д. Я просто не мог правильно получить синтаксис, чтобы вытащить его. Я действительно хотел сделать это с помощью селектора css, и теперь я знаю, как это сделать. – rollbahn

ответ

2

Это хороший случай для CSS attribute selector. Например:

doc.css('meta[name="geo.position"]').each do |meta_tag| 
    puts meta_tag['content'] # => 35.667459;139.706256 
end 

Эквивалентное выражение XPath почти идентично:

doc.xpath('//meta[@name = "geo.position"]').each do |meta_tag| 
    puts meta_tag['content'] # => 35.667459;139.706256 
end 
+0

Ничего себе, спасибо, что я понятия не имел, что вы можете использовать селектор css для метатег тоже. Если бы я хотел получить lat/long от js, то то же самое применимо? <тип скрипта = "текст/JavaScript"> // rollbahn

+0

Нет, Nokogiri не делает Javascript. Вы можете извлечь Javascript из HTML с помощью Nokogiri, а затем использовать регулярное выражение для получения lat/long. 'doc.at ('script'). content [/ GLatLng \\ (([^)] +) \\) /, 1] # =>" 35.667459, 139.706256 "' например. –

+0

Aha okay Огромное спасибо за вашу помощь - это действительно сделало вещи намного яснее. – rollbahn

1
require 'nokogiri' 

doc = Nokogiri::HTML('<meta name="geo.position" content="35.667459;139.706256" />') 
doc.at('//meta[@name="geo.position"]')['content'] # => "35.667459;139.706256" 
Смежные вопросы