2014-09-13 81 views
1

我正在用Ruby和Nokogiri进行数据抓取。是否可以在我的电脑中下载和解析本地文件?用open-uri打开本地文件

我:

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 
+1

不可能。你所有的代码都需要'open-uri',然后给一个变量分配一个字符串。 – 7stud 2014-09-14 03:10:06

+0

为什么使用OpenURI打开一个文件时可以自己使用'open'? – 2014-12-05 21:03:05

回答

4

如果你想分析与引入nokogiri一个本地文件,你可以不喜欢这样。

file = File.read('/home/nav/Desktop/Scraping/scrap1.html') 
doc = Nokogiri::HTML(file) 
0

这就是我按照文档所做的。

f = File.open("//home/nav/Desktop/Scraping/scrap1.html") 
    doc = Nokogiri::HTML(f) 
    f.close 
1

当你打开浏览器中的本地文件,在地址栏中的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的答案。

0

我会利用机械化和本地保存文件,然后用引入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)) 

希望帮助!