未定义的方法’click’为nil:NilClass(Mechanize)
我正在使用Mechanize构建一个脚本来从网站上抓取数据。 该脚本应该点击“阅读传记”链接,然后在下一页抓取该成员的传记。
这是Rake文件中的脚本:
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
您正在使用的代码:
member.link_with(:text => 'Read biography')
找不到链接,因为链接中有一些空格和新行字符。 你需要像这样使用它:
member.link_with(:text => /Read biography/)
该代码将找到该链接。
点击有两个电话:
member = link.click
和
bio_link = member.link_with(:text => 'Read biography').click
第一个是在迭代器上调用的,它不能nil
,因此有问题的是第二个。
尝试调试输出,或者在# Get bio
之前设置一个断点并检查它的错误。 不可能说为什么member.link_with(:text => 'Read biography')
根据您提供的信息返回nil
。