2015-01-20 3 views
2

Mac OS에서 Ruby 2.1.0p0을 사용하고 있습니다.CSV의 URL 열기

CSV 파일을 구문 분석하고 모든 URL을 가져온 다음 Nokogiri와 OpenURI를 사용하여 내가 갇혀있는 부분을 긁어냅니다. 내가 수동으로 배열을 만든 다음 그것을 통해 실행

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

내가 오류를 얻을 : 나는 URL을 배열을 통해 실행하는 each 루프를 사용하려고하면

, 나는이 오류가 발생합니다. 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 

이 도와주세요 :

여기 내 코드입니다! 나는 완전히 아이디어에서 벗어났다.

답변

3

헤더 행을 처리하고있는 것처럼 보입니다. 그 값은 문자 그대로 "URL"입니다. 유효한 URI가 아니므로 open-uri은 만지지 않습니다.

헤더를 자동으로 사용하는 CSV 모듈에 대해 headers 옵션이 있습니다. 그걸 켜고 참조하십시오 row["URL"]

+0

붐! 완벽하게 작동합니다. 정말 고맙습니다. 정말 감사. 이 사람을 투표 해주세요! 나는 충분한 평판이 없다. :-( –

+1

@ JacksonRiso 당신은 upvote (아직)에 충분한 담당자가 없을 수도 있지만, [대답을 수락 할 수 있어야합니다] (http://stackoverflow.com/help/someone-answers) (이것은 당신에게 작은 담당자도). – 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() 

희망이 있습니다.