我在Mac OS上使用Ruby 2.1.0p0。
我正在解析一个CSV文件并抓取所有网址,然后使用Nokogiri和OpenURI来抓取它们,这就是我遇到的问题。
当我尝试使用each
循环来运行URL数组时,我收到此错误:
initialize': No such file or directory @ rb_sysopen - URL (Errno::ENOENT)
当我手动创建一个数组,然后运行它时,我没有得到任何错误。我已尝试to_s
,URI::encode
,以及我能想到的所有内容并在Stack Overflow上找到。
我可以在阵列上使用puts
后复制并粘贴来自CSV或终端的URL,它在我的浏览器中打开没问题。我尝试用Nokogiri打开它没有发生。
这是我的代码:
require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'uri'
require 'csv'
events = Array.new
CSV.foreach('productfeed.csv') do |row|
events.push URI::encode(row[0]).to_s
end
events.each do |event|
page = Nokogiri::HTML(open("#{event}"))
#eventually, going to find info on the page, and scrape it, but not there yet.
#something to show I didn't get an error
puts "open = success"
end
请帮忙!我完全没有想法。
答案 0 :(得分:3)
看起来您正在处理标题行,其中这些值的字面意思是"URL"
。这不是有效的URI,因此open-uri
无法触及它。
CSV模块的headers
选项会自动使用标题。尝试启用此功能并引用row["URL"]
答案 1 :(得分:0)
我尝试做同样的事情,并发现使用文本文件可以更好地工作。
这就是我所做的。
#!/usr/bin/python
#import webbrowser module and time module
import webbrowser
import time
#open text file as "dataFile" and verify there is data in said file
dataFile = open('/home/user/Desktop/urls.txt','r')
if dataFile > 1:
print("Data file opened successfully")
else:
print("!!!!NO DATA IN FILE!!!!")
exit()
#read file line by line, remove any spaces/newlines, and open link in chromium-browser
for lines in dataFile:
url = str(lines.strip())
print("Opening " + url)
webbrowser.get('chromium-browser').open_new_tab(url)
#close file and exit
print("Closing Data File")
dataFile.close()
#wait two seconds before printing "Data file closed".
#this is purely for visual effect.
time.sleep(2)
print("Data file closed")
#after opener has run, user is prompted to press enter key to exit.
raw_input("\n\nURL Opener has run. Press the enter key to exit.")
exit()
希望这有帮助!