2015-09-25 30 views
0

我建立使用機械化從網站抽取數據的腳本。該腳本應該點擊「讀傳記」鏈接,然後刮成員的傳記的下一個頁面上。未定義的方法「點擊」的零:NilClass(機械化)

這裏是在瑞克文件中的腳本:

require 'mechanize' 
require 'date' 
require 'json' 


task :testing2 do 

    agent = Mechanize.new 
    page = agent.get("https://www.congress.gov/members") 

    page_links = page.links_with(href: %r{.*/member/\w+}) 


    member_links = page_links[0...2] 

    members = member_links.map do |link| 

     member = link.click 

     name = member.search('title').text.split('|')[0] 
     institution = member.search('td~ td+ td').text.split(':')[0] 
     dob = member.search('.birthdate').text.strip[1..4] 

     # Get bio 
     bio_link = member.link_with(:text => 'Read biography').click 
     bio = bio_page.search('p').text.strip 

     { 
     name: name.strip, 
     institution: institution.strip, 
     dob: dob, 
     bio: bio 

     } 

    end 

    puts JSON.pretty_generate(members) 

end 
+0

如果你不直接使用引入nokogiri那麼這不是一個問題,引入nokogiri。 –

回答

0

您正在使用的代碼:

member.link_with(:text => 'Read biography') 

沒有找到鏈接,因爲鏈接有一定的空間和新的行字符它。你需要這樣使用它:

member.link_with(:text => /Read biography/) 

該代碼將找到鏈接。

+0

謝謝!它完全解決了這個錯誤:) –

0

有兩個調用點擊:

member = link.click 

bio_link = member.link_with(:text => 'Read biography').click 

首先是所謂的迭代器,即不能是nil,因此有問題的是第二個。

儘量把調試輸出,或# Get bio之前設置一個斷點,並檢查有什麼不妥的地方。這是不可能說爲什麼member.link_with(:text => 'Read biography')通過您所提供的信息返回nil

相關問題