извлечь содержимое атрибута содержимого в метатеге веб-сайта с заданным значением атрибута name с помощью nokogiri в ruby? - PullRequest
3 голосов
/ 05 января 2010

Мой первый вопрос здесь, было бы здорово найти ответ. Я новичок в использовании nokogiri.

Вот моя проблема. У меня есть что-то вроде этого в главе HTML на целевом сайте (здесь сообщение techcrunch):

<meta content="During my time at TechCrunch I've seen thousands of startups and written about hundreds of them. I sure as hell don't know all ..." name="description"/>

Теперь я хотел бы иметь скрипт для запуска через метатеги, найти его с атрибутом name «description» и получить то, что находится в атрибуте содержимого.

Я пробовал что-то подобное

require 'rubygems'
require 'nokogiri'
require 'open-uri'

url = "http://www.techcrunch.com/2009/10/11/the-underutilized-power-of-the-video-demo-to-explain-what-the-hell-you-actually-do/"
doc = Nokogiri::HTML(open(url))
posts = doc.xpath("//meta")
posts.each do |link|
  a = link.attributes['name']
  b = link.attributes['content']
end

после чего я мог бы выбрать ссылку, где имя атрибута равно описанию - но этот код возвращает ноль для a и b.

Я играл с posts = doc.xpath("//meta"), posts = doc.xpath("//meta/*") и т. Д., Но все еще ноль.

Ответы [ 2 ]

1 голос
/ 05 января 2010

Проблема не в xpath, так как кажется, что документ не анализируется. Вы можете проверить, что с puts doc, он не содержит полный ввод. Кажется, это проблема с анализом комментариев (я подозреваю, что неверный HTML или ошибка в libxml2).

В вашем случае я бы использовал регулярное выражение как обходной путь . Учитывая, что теги <meta> достаточно просты, что может сработать, например, /<meta name="([^"]*)" content="([^"]*)"/

0 голосов
/ 05 января 2010

вы должны изменить

doc = Nokogiri::HTML(open(url))

до

doc = Nokogiri::HTML(open(url).read)

обновление: а может и нет :) на самом деле ваш код работает на меня, используя ruby ​​1.8.7 / nokogiri 1.4.0

...