2015-01-20 8 views
2

Я использую Ruby 2.1.0p0 для Mac OS.Открыть URL из CSV

Я разбираю CSV-файл и хватаю все URL-адреса, а затем используя Nokogiri и OpenURI, чтобы очистить их, где я застреваю.

Когда я пытаюсь использовать each цикл, чтобы работать через массив URL-адреса, я получаю эту ошибку:

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

Когда я вручную создать массив, а затем запустить через него я не получаю сообщение об ошибке. Я пробовал to_s, URI::encode, и все, что я мог придумать, и найти в Stack Overflow.

Я могу скопировать и вставить URL-адрес из CSV или из терминала после использования puts в массиве, и он не открывается в моем браузере без проблем. Я пытаюсь открыть его с Нокогири, этого не происходит.

Вот мой код:

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 

Пожалуйста, помогите! Я полностью из идей.

ответ

3

Похоже, вы обрабатываете строку заголовка, где по этим значениям буквально "URL". Это недействительный URI, поэтому open-uri не коснется его.

Существует опция headers для модуля CSV, который будет автоматически использовать заголовки. Попробуйте включить это и ссылаться на row["URL"]

+0

BOOM! Работает отлично. Огромное спасибо. Я очень ценю это. Пожалуйста, проголосуйте за этого парня! У меня недостаточно репутации. :-( –

+1

@JacksonRiso у вас может не хватить репутации для продолжения (пока), но вы должны иметь возможность [принять ответ] (http://stackoverflow.com/help/someone-answers) (который даст вам немного rep тоже). – matt

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

Надеюсь, что это поможет!

Смежные вопросы