/ / Відкрити локальний файл з open-uri - ruby, web-scraping, nokogiri, open-uri

Відкрийте локальний файл з open-uri-ruby, web-scraping, nologiri, open-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

Відповіді:

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

Надія, що допомагає!