2014-09-13 2 views
1

Je suis en train de faire du scraping avec Ruby et Nokogiri. Est-il possible de télécharger et d'analyser un fichier local sur mon ordinateur?Ouvrir un fichier local avec open-uri

J'ai:

require 'open-uri' 

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

Il donne erreur:

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

Impossible. Tout votre code nécessite 'open-uri', puis assignez une chaîne à une variable. – 7stud

+0

Pourquoi utiliser OpenURI pour ouvrir un fichier quand vous pouvez utiliser 'open' tout seul? –

Répondre

4

Si vous souhaitez analyser un fichier local avec Nokogiri vous pouvez le faire comme ça.

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

C'est comme cela que je le fais selon la documentation.

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

Lorsque vous ouvrez un fichier local dans un navigateur, l'URL dans la barre d'adresse est affiché comme:

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

Mais cela ne signifie pas que vous utilisez ce format dans un script Ruby. Votre script Ruby n'envoie pas le nom de fichier à un navigateur, puis demande au navigateur de récupérer le fichier. Votre script Ruby recherche directement dans votre système de fichiers.

La même chose est vraie pour les URL: votre script Ruby ne demande pas à votre navigateur d'aller récupérer une page sur Internet, Ruby récupère la page elle-même en envoyant une requête en utilisant l'interface réseau de votre système. Après tout, un navigateur et un programme Ruby ne sont que des programmes informatiques. Ce que votre navigateur peut faire sur un réseau, un programme Ruby peut le faire aussi.

Cela fonctionne pour moi:

require 'open-uri' 

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

Vous devez obtenir votre droit chemin, cependant. La seule raison que je peux penser à utiliser open() est si vous avez un tableau de noms de fichiers et d'URL mélangés ensemble. Si ce n'est pas votre cas, voyez la réponse de new2code.

0

Je utiliser Mechanize et enregistrez le fichier localement, puis analyser avec Nokogiri comme ceci:

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

Hope that helps!

Questions connexes