从CSV打开网址

时间:2015-01-20 18:45:08

标签: ruby csv nokogiri

我在Mac OS上使用Ruby 2.1.0p0。

我正在解析一个CSV文件并抓取所有网址,然后使用Nokogiri和OpenURI来抓取它们,这就是我遇到的问题。

当我尝试使用each循环来运行URL数组时,我收到此错误:

initialize': No such file or directory @ rb_sysopen - URL (Errno::ENOENT)

当我手动创建一个数组,然后运行它时,我没有得到任何错误。我已尝试to_sURI::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

请帮忙!我完全没有想法。

2 个答案:

答案 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()

希望这有帮助!