【发布时间】:2015-07-26 12:49:24
【问题描述】:
已解决 - "abc = list.scan(/[([^)]+)]/).last.first" 行是正确的,但也包含了网站搜索表单不接受的引号。更正为 abc = list.scan(/\"([^)]+)\"/).join。
感谢大家的帮助。
我必须使用 csv 文件中包含 100 个关键字的列表来自动进行搜索。
使用 Mechanize,我可以使用此示例 (http://mechanize.rubyforge.org/GUIDE_rdoc.html) 提交搜索:
agent = Mechanize.new
page = agent.get('http://google.com/')
google_form = page.form('f')
google_form.q = 'ruby mechanize'
page = agent.submit(google_form)
pp page
但是,当我让它遍历 csv 文件时,它会返回一个错误(在本例中,第一个 csv 条目将是“ruby mechanize”:
#i have already imported the csv list, now it is looping through the array "raw_list"
raw_list.each do |list|
abc = list.scan(/\[([^\)]+)\]/).last.first
# i tested a "puts abc" which returned "ruby mechanize", so I don't understand why the rest of this doesn't work
agent = Mechanize.new
page = agent.get('http://google.com/')
google_form = page.form('f')
google_form.q = abc
#even though abc = "ruby mechanize", an error occurs.
page = agent.submit(google_form)
pp page
它似乎没有使用变量 "abc",但如果您手动输入 'ruby mechanize' 则可以工作,即使两者相同。 p>
出现的错误是:
C:filename: in `block (2 levels) in <top (required)>': undefined method `text' for nil:NilClass (NoMethodError)
from C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/mechanize-2.7.3/lib/mechanize.rb:442:in `get'
from C:/Users/victor/RubymineProjects/untitled/scraper.rb:23:in `block in <top (required)>'
from C:/Users/victor/RubymineProjects/untitled/scraper.rb:19:in `each'
from C:/Users/victor/RubymineProjects/untitled/scraper.rb:19:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
任何帮助将不胜感激。
【问题讨论】:
-
发布错误可能会有所帮助:)
-
如果没有看到行号,我就不能说太多。我的猜测是你得到一个没有表单的页面(其中一个“我们认为你是机器人”页面)
标签: ruby csv automation web-scraping mechanize