Ceci est ma première tentative d'analyse d'une page Web à l'aide de Nokogiri. J'essaie d'extraire les adresses d'une page Web et de les stocker dans un fichier CSV. Jusqu'ici, j'ai seulement pu extraire les champs City, State et Zip.Utilisation de Nokogiri pour extraire les composants d'adresse facultatifs
Je ne sais pas comment extraire le nom de l'installation, l'adresse, le téléphone, les numéros et les informations sur la société. L'adresse peut contenir un ou deux composants de rue.
Pour le téléphone, il peut y avoir un ou plusieurs numéros de téléphone. Les numéros de téléphone peuvent être des numéros normaux ou des numéros de télécopie, mais ils sont seulement indiqués dans le texte plutôt que dans une étiquette. Pour l'entreprise, j'aimerais pouvoir extraire l'URL et le nom.
Chaque adresse sur la page est jointe comme suit:
<!-- address entry -->
<div id='1234' class='address'>
<div class='address_header'>
<h1 class='header_name'>
<strong><a href='{URL}'>Facility Name</a></strong>
</h1>
<h2 class='header_city'>
New York
</h2>
</div>
<div class='address_details'>
<div class='info'>
<p class='address'>
<span class='street'>123 ABC St</span><br />
<span class='street'>Unit 1</span><br />
<span class='city'>New York</span>,
<span class='state'>NY</span>
<span class='zip'>10022</span>
</p>
<p class='phone'>
Phone: <span class='tel'>999.999.9999</span>
</p>
<p class='phone'>
Fax: <span class='tel'>888.888.8888</span>
</p>
<p class='company'>
Company: <a href='{URL}'>Company Name</a>
</p>
</div>
</div>
</div>
<!-- address entry -->
<!-- address entry -->
<div id='4567' class='address'>
<div class='address_header'>
<h1 class='header_name'>
<strong><a href='{URL}'>Facility Name</a></strong>
</h1>
<h2 class='header_city'>
New York
</h2>
</div>
<div class='address_details'>
<div class='info'>
<p class='address'>
<span class='street'>456 DEF Rd</span><br />
<span class='city'>New York</span>,
<span class='state'>NY</span>
<span class='zip'>10022</span>
</p>
<p class='phone'>
Phone: <span class='tel'>555.555.5555</span>
</p>
<p class='company'>
Company: <a href='{URL}'>Company Name</a>
</p>
</div>
</div>
</div>
<!-- address entry -->
Voici mon set-up très basique.
require 'nokogiri'
require 'open-uri'
require 'csv'
doc = Nokogiri::HTML(open('[URL]'))
Cities = Array.new
States = Array.new
Zips = Array.new
doc.css("p[class='address']").css("span[class='city']").each do |city|
Cities << city.content
end
doc.css("p[class='address']").css("span[class='state']").each do |state|
States << state.content
end
doc.css("p[class='address']").css("span[class='zip']").each do |zip|
Zips << zip.content
end
CSV.open("myCSV.csv", "wb") do |row|
row << ["City", "State", "Zip"]
(0..Cities.length - 1).each do |index|
row << [Cities[index], States[index], Zips[index]]
end
end
Le stockage des informations dans des tableaux séparés semble ici très grossier. Je essentiellement faire une entrée de ligne dans une table CSV pour chaque occurrence du noeud d'adresse dans le document source, puis le remplir avec des champs si elles existent:
Facility St_1 St_2 City State Zip Phone Fax URL Company
======== ===== ===== ===== ====== ==== ====== ==== ==== ============
xxxxxxxx xxxx xxxx xxxxx xxxx xxxxx xxxx xxxxxxxx
xxxxxxxx xxxx xxxxx xxxx xxxxx xxxx xxxxx xxxx xxxx xxxxxxxx
quelqu'un peut me aider?
C'est ce que j'ai fait, et j'ai aussi beaucoup appris! – regulus