我正在用Ruby和Nokogiri进行数据抓取。可以在我的电脑中下载并解析本地文件吗?
我有:
require 'open-uri'
url = "file:///home/nav/Desktop/Scraping/scrap1.html"
它给出的错误为:
No such file or directory @ rb_sysopen - file:home/nav/Desktop/Scraping/scrap1.html
如果您想用Nokogiri解析本地文件,可以这样做。
file = File.read('/home/nav/Desktop/Scraping/scrap1.html')
doc = Nokogiri::HTML(file)
在浏览器中打开本地文件时,地址栏中的URL显示为:
file:///Users/7stud/Desktop/accounts.txt
但这并不意味着您在Ruby脚本中使用这种格式。Ruby脚本不会将文件名发送到浏览器,然后要求浏览器检索文件。Ruby脚本直接搜索文件系统。
URL也是如此:Ruby脚本不要求浏览器从互联网上检索页面,Ruby通过使用系统的网络接口发送请求来检索页面本身。毕竟,浏览器和Ruby程序都只是计算机程序。你的浏览器可以在网络上做什么,Ruby程序也可以。
这对我有效:
require 'open-uri'
text = open('./data.txt').read
puts text
不过,你必须走对你的路。我能想到使用open()
的唯一原因是,如果您将文件名和URL的数组混合在一起。如果您的情况并非如此,请参阅new2code的答案。
这就是我根据文档所做的操作。
f = File.open("//home/nav/Desktop/Scraping/scrap1.html")
doc = Nokogiri::HTML(f)
f.close
我会使用机械化并在本地保存文件,然后用Nokogiri解析它,如下所示:
# Save the file
agent = Mechanize.new
agent.pluggable_parser.default = Mechanize::Download
current_url = 'http://www.example.com'
file = agent.get(current_url)
file.save!("#{Rails.root}/tmp/")
# Read the file
page = Nokogiri::HTML::Reader(File.open(file))
希望能有所帮助!