2015-10-20 2 views
0

У меня есть этот HTML:Извлечь параметр HREF из <a> тега с помощью Mechanize и Nokogiri

<div id="main"> 
    <li> 
     <h2> 
      <a href="https://www.congress.gov/bill/99th-congress/senate-joint-resolution/427">S.J.Res.427</a> 
     </h2> 
    </li> 
    <li> 
     .... 
    </li> 
</div> 

Я хочу, чтобы извлечь HREF значение <a> тега.

Использование Mechanize и Nokogiri я сделал это:

activity_list = member.search('#main li') 
activity_list.each do |link| 
    activity_link = link.at("h2 a[href]") 
end 

, но я получил TypeError: no implicit conversion of nil into String

Что случилось?

+1

Я не могу воспроизвести проблему. На моей машине код выше работает отлично. Вероятно, у вас есть ошибка, вызванная некоторым другим кодом. – mudasobwa

+0

@mudasobwa hi, я исправил его, изменив его на activity_link = link.at ('h2 a [href]'). To_s. Но все же это не тот результат, который я хочу, потому что он дал мне все, что есть S.J.Res.427. Пока я просто хочу значение href. Как удалить другие вещи и просто извлечь значение href? –

ответ

0

Вы ищете #attr метод:

html = Nokogiri::HTML('<div id="main"><li><h2> 
    <a href="https://www.congress.gov/bill/99th-congress/senate-joint-resolution/427">S.J.Res.427</a> 
</h2></li></div>') 
html.search('#main li').each do |link| 
    #       ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓ 
    puts link.at("h2 a[href]").attr('href') 
end 
#⇒ https://www.congress.gov/bill/99th-congress/senate-joint-resolution/427 
+2

или более обычно '# []' – pguardiario

0

Я пишу это нравится:

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
    <div id="main"> 
     <li> 
     <h2> 
      <a href="foo">S.J.Res.427</a> 
     </h2> 
     </li> 
     <li> 
     <h2> 
      <a href="bar">S.J.Res.427</a> 
     </h2> 
     </li> 
    </div> 
EOT 

activity_list = doc.search('#main li') 
activity_list.each do |link| 
    activity_link = link.at("h2 a[href]") 
    activity_link['href'] # => "foo", "bar" 
end 

Когда вы указываете на узел, вы можете использовать [] для доступа к значениям параметров ,

Смежные вопросы