Ruby爬虫抓取Allocine电影标题存入CSV遇NoMethodError问题求助
解决你的CSV写入问题
嘿,我一眼就看到问题出在哪啦!你抓取电影标题的部分没问题,但写入CSV的时候踩了个小坑。
错误原因
Ruby的CSV库里,csv <<方法需要接收一个数组(用来表示一行里的各个列),但你现在直接把单个字符串(比如"Coco")传进去了,CSV内部会尝试对这个字符串调用map方法处理列,可字符串根本没有map方法,所以就报了undefined method 'map' for "Coco":String这个错。
修正后的代码
只需要把写入CSV的那行改一下,把单个字符串放进数组里就行:
require 'open-uri' require 'nokogiri' require 'csv' url = "http://www.allocine.fr/film/meilleurs/" html_file = open(url).read html_doc = Nokogiri::HTML(html_file) array = [] html_doc.search('.no_underline').each do |element| array << element.text.strip end puts array csv_options = { col_sep: ',', force_quotes: true, quote_char: '"' } filepath = 'allocine.csv' CSV.open(filepath, 'wb', csv_options) do |csv| # 把单个字符串包装成数组,每一行存一个标题 array.each { |item| csv << [item] } end
关键修改点
原来的csv << item改成了csv << [item],这样每一次写入的都是一个包含单个元素的数组,CSV就能正确识别这是一行里的一列数据啦。
运行这个修正后的代码,你就能看到allocine.csv里整整齐齐地列着所有抓取到的电影标题了!
内容的提问来源于stack exchange,提问作者Pierre Laburthe
相关产品推荐
相关产品推荐

