2014-09-13 1 views
1

Я делаю очистку данных с Ruby и Nokogiri. Можно ли загрузить и проанализировать локальный файл на моем компьютере?Открыть локальный файл с открытым uri

у меня есть:

require 'open-uri' 

url = "file:///home/nav/Desktop/Scraping/scrap1.html" 

Это дает ошибку, как:

No such file or directory @ rb_sysopen - file:\home/nav/Desktop/Scraping/scrap1.html 
+1

Невозможно. Весь ваш код требует «open-uri», а затем присваивает строку переменной. – 7stud

+0

Зачем использовать OpenURI для открытия файла, когда вы можете использовать 'open' самостоятельно? –

ответ

4

Если вы хотите, чтобы разобрать локальный файл с Nokogiri вы можете сделать это, как это.

file = File.read('/home/nav/Desktop/Scraping/scrap1.html') 
doc = Nokogiri::HTML(file) 
0

Так я делаю это, как указано в документации.

f = File.open("//home/nav/Desktop/Scraping/scrap1.html") 
    doc = Nokogiri::HTML(f) 
    f.close 
1

При открытии локального файла в браузере, URL в адресной строке отображается:

file:///Users/7stud/Desktop/accounts.txt 

Но это не означает, что вы используете этот формат в сценарии Ruby. Ваш скрипт Ruby не отправляет имя файла в браузер, а затем запрашивает браузер для получения файла. Ваш скрипт Ruby напрямую ищет вашу файловую систему.

То же самое верно для URL-адресов: ваш скрипт Ruby не запрашивает у вашего браузера доступ к странице из Интернета, Ruby извлекает саму страницу, отправив запрос с использованием сетевого интерфейса вашей системы. В конце концов, браузер и рубиновая программа - это просто компьютерные программы. То, что ваш браузер может делать по сети, также может сделать программа Ruby.

Это работает для меня:

require 'open-uri' 

text = open('./data.txt').read 
puts text 

Вы должны получить правильный путь, однако. Единственная причина, по которой я могу думать о том, чтобы использовать open(), - это если у вас есть массив имен файлов и URL-адресов, смешанных друг с другом. Если это не ваша ситуация, см. Ответ new2code.

0

Я хотел бы использовать Mechanize и сохраните файл локально, а затем разобрать его Nokogiri следующим образом:

# Save the file 
agent = Mechanize.new 
agent.pluggable_parser.default = Mechanize::Download 
current_url = 'http://www.example.com' 
file = agent.get(current_url) 
file.save!("#{Rails.root}/tmp/") 

# Read the file 
page = Nokogiri::HTML::Reader(File.open(file)) 

Надежда, что помогает!