Hpricot: как сделать условный поиск с помощью Hpricot в Ruby on Rails - PullRequest
1 голос
/ 01 июня 2011

Я анализирую два разных сайта с похожими тегами HTML. Мне нужно использовать общий парсер для этого. Моя проблема в том, что один сайт имеет формат HTML div / ol / li / span / a, а другой - div / ol / li / h3 / a

Мой текущий код парсера

 doc = Hpricot(open("http://test.com").read)
 doc.search("div/ol/li/span/a").each do |a|
   question = a.inner_html
   ans_url =  a.attributes['href']
   puts question
   puts answer_url
 end

Это хорошо работает с первым сайтом. Как я могу использовать этот же код для анализа моего второго сайта (div / ol / li / h3 / a). Как я могу указать условия. То, что я пробовал, показано ниже

 doc = Hpricot(open("http://test.com").read)
 doc.search("div/ol/li/span or h3/a").each do |a|
   question = a.inner_html
   ans_url =  a.attributes['href']
   puts question
   puts answer_url
 end

Но это не сработало. Может кто-нибудь, пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Сработало, я использовал следующий код

 doc.search("div/ol/li/span/a | div/ol/li/h3/a").each do |a|
  #..
 end

Спасибо всем

1 голос
/ 01 июня 2011

Почему бы просто не искать оба?

Редактировать: я снова был неправ - и я понял, почему я переключился на Нокогири .Гораздо проще в использовании:

require 'open-uri'
doc = Nokogiri::HTML(open('http://example.com/'))


doc.search("div > ol > li > span > a", "div > ol > li > h3 > a").each do |a|
  question = a.content
  answer_url =  a.attr('href').value
  puts question
  puts answer_url
end
...