我正在使用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
答案 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))
希望有所帮助!