使用open-uri打开本地文件

时间:2014-09-13 19:21:50

标签: ruby web-scraping nokogiri open-uri

我正在使用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

4 个答案:

答案 0 :(得分:5)

如果你想用Nokogiri解析本地文件,你可以这样做。

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

这是我按照文档的方式进行的。

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

答案 3 :(得分:0)

我会使用Mechanize并在本地保存文件,然后用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))

希望有所帮助!