Я роблю скребки даних з Рубі та Нокогірі. Чи можна завантажити та проаналізувати локальний файл на моєму комп’ютері?
Я маю:
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
Відповіді:
4 для відповіді № 1Якщо ви хочете розібрати локальний файл з Nokogiri, ви можете зробити це так.
file = File.read("/home/nav/Desktop/Scraping/scrap1.html")
doc = Nokogiri::HTML(file)
1 для відповіді № 2
Коли ви відкриєте локальний файл у веб-переглядачі, URL-адреса в адресному рядку відображається як:
file:///Users/7stud/Desktop/accounts.txt
Але це не означає, що ви використовуєте цей формат у форматі aРубі сценарій. Ваш сценарій Ruby не надсилає ім'я файлу в браузер, а потім просить браузер відновити файл. Ваш сценарій Ruby здійснює пошук у вашій файловій системі безпосередньо.
Те саме стосується URL-адрес: Ваш сценарій Ruby не вимагає від вашого браузера перейти на сторінку з Інтернету, Ruby отримує саму сторінку, надіславши запит за допомогою мережевого інтерфейсу вашої системи. Зрештою, браузер і програма Ruby - це просто комп'ютерні програми. Що може зробити ваш браузер через мережу, це може зробити і програма Ruby.
Це працює для мене:
require "open-uri"
text = open("./data.txt").read
puts text
Ти мусиш правильно прокласти шлях. Єдина причина, яку я можу думати використовувати open()
це якщо ви мали масив файлів і URL-адрес, змішаних разом. Якщо це не ваша ситуація, дивіться відповідь new2code.
0 для відповіді № 3
Так я це роблю, як згідно з документацією.
f = File.open("//home/nav/Desktop/Scraping/scrap1.html")
doc = Nokogiri::HTML(f)
f.close
0 для відповіді № 4
Я б скористався механізмом 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))
Надія, що допомагає!