从 CSV 打开 URL
Open URLs from CSV
我在 Mac OS.OS 上使用 Ruby 2.1.0p0
我正在解析一个 CSV 文件并抓取所有 URL,然后使用 Nokogiri 和 OpenURI 抓取它们,这就是我遇到的问题。
当我尝试使用 each
循环通过 URLs 数组到达 运行 时,出现此错误:
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
请帮忙!我完全没有想法。
您似乎正在处理 header 行,其中一个值的字面意思是 "URL"
。那不是一个有效的 URI,所以 open-uri
不会碰它。
CSV 模块有一个 headers
选项,它将自动使用 header。尝试打开它并参考 row["URL"]
我尝试做同样的事情,发现使用文本文件效果更好。
这是我做的。
#!/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()
希望对您有所帮助!
我在 Mac OS.OS 上使用 Ruby 2.1.0p0
我正在解析一个 CSV 文件并抓取所有 URL,然后使用 Nokogiri 和 OpenURI 抓取它们,这就是我遇到的问题。
当我尝试使用 each
循环通过 URLs 数组到达 运行 时,出现此错误:
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
请帮忙!我完全没有想法。
您似乎正在处理 header 行,其中一个值的字面意思是 "URL"
。那不是一个有效的 URI,所以 open-uri
不会碰它。
CSV 模块有一个 headers
选项,它将自动使用 header。尝试打开它并参考 row["URL"]
我尝试做同样的事情,发现使用文本文件效果更好。
这是我做的。
#!/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()
希望对您有所帮助!