我正在尝试使用Mechanize和Nokogiri抓取一个网站并在XML中存储数据。我没有建立Rails项目,我只使用Ruby和IRB。
我写了这个方法:
def mechanize_club
agent = Mechanize.new
agent.get("http://www.rechercheclub.applipub-fft.fr/rechercheclub/")
form = agent.page.forms.first
form.field_with(:name => 'codeLigue').options[0].select
form.submit
page2 = agent.get('http://www.rechercheclub.applipub-fft.fr/rechercheclub/club.do?codeClub=01670001&millesime=2015')
body = page2.body
html_body = Nokogiri::HTML(body)
codeclub = html_body.search('.form').children("tr:first").children("th:first").to_i
@codeclubs << codeclub
filepath = '/davidgeismar/Documents/codeclubs.xml'
builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
xml.root {
xml.codeclubs {
@codeclubss.each do |c|
xml.codeclub {
xml.code_ c.code
}
end
}
}
end
puts builder.to_xml
end
我的第一个问题是我不知道如何测试我的代码。我在控制台中调用ruby webscraper.rb
,我认为该文件被处理了,但它没有在指定路径中创建XML文件。然后,更具体地说,我很确定这段代码是错误的,因为我没有机会测试它。
基本上我要做的就是多次提交一个表单:
agent = Mechanize.new
agent.get("http://www.rechercheclub.applipub-fft.fr/rechercheclub/")
form = agent.page.forms.first
form.field_with(:name => 'codeLigue').options[0].select
form.submit
我认为这段代码是可以的,但我不希望它只选择options[0]
,我希望它选择一个选项,然后刮掉我需要的所有数据,然后回到页面,然后选择options[1]
…直到没有更多的选项(我猜是一个迭代)。
文件被处理,但它不会在指定的路径创建一个xml文件。
代码中没有创建文件的内容。打印一些输出,但不对open
或write
文件执行任何操作。
也许你应该阅读IO和文件文档,并审查你是如何使用你的filepath
变量?
第二个问题是你没有在任何地方调用你的方法。虽然它已经定义好了,Ruby将看到它并解析该方法,但它不知道您想用它做什么,除非您调用该方法:
def mechanize_club
...
end
mechanize_club()