2017-11-14 2 views
-1

Ich versuche, ein Stück Gesetzgebung zu kratzen. Hier ist ein Auszug aus dem Code:Nokogiri ersetzen beliebige Knoten

<h5> 
<span class="expanderComparator clickable">&nbsp;</span> 
<span class="context-menu">&nbsp;</span> 
<a href="index.html#a340"> 
<strong>Art. 340</strong> 
</a> 
<sup> 
<a href="#fn-#a340-1">1</a> 
</sup> 
<a href="index.html#a340">Mesures conservatoires</a> 
</h5> 

Dieses Stück Code wird für jeden Artikel wiederholt (kann über tausend), aber seine Struktur folgt im Wesentlichen das gleiche Muster.

Ich versuche, ein Array als solche zu bauen:

a340 = { 'number' => '340', 'title' => 'Mesures conservatoires'} 

So offensichtlich ich Nokogiri sah, die angemessen zu sein scheint. Hier sind die Probleme aber:

  • dieses Stück <sup><a href="#fn-#a340-1">1</a></sup> durch ein Leerzeichen ersetzt werden muss (“„) =>h1 = @doc.at_xpath "//sup/a" h1.content = " "

  • alle span und a Tags benötigen

  • schließlich entfernt werden , behalte nur, was innerhalb des Tags h5 ist (weil es auch andere Bloat gibt, die nicht benötigt werden) =>.css("h5").text

Ich konnte im Wesentlichen alle oben genannten erreichen, aber irgendwie bin ich nicht in der Lage, sie in eine logische Software zu verketten.

Jede Hilfe würde sehr geschätzt werden!

Caveat: es braucht nur reinen Rubin sein, so dass keine Schienen :(

+0

Was ist die Ressource, die versucht zu scrapen ?, um zu sehen, ob es ein Muster gibt, und wenn du sagst, du willst ein Array erstellen, das ist ein Hash oder willst du ein Array von Hashes erstellen ?, auch wenn die Zahl 340 ist , und das Objekt a340, ist der Name auch Variable? –

+0

Hier ist ein Link zur Quelle: https://www.admin.ch/opc/fr/classified-compilation/20061121/index.html Ich ziele in der Tat auf eine Reihe von Hashes, speziell ein Array oder Artikel. Der Name des Objekts ist auch eine Variable (dh es ist eine Iteration eines Artikels) –

Antwort

0

Vielleicht '#lawcontent .collapseable h5' Zugriff funktionieren könnte.

require 'nokogiri' 
require 'open-uri' 

url = 'https://www.admin.ch/opc/fr/classified-compilation/20061121/index.html' 
doc = Nokogiri.HTML(open url) 
articles_hash = doc.css('#lawcontent .collapseable h5').map do |element| 
    { 
    'number' => element.css('a strong').text.sub(/\AArt. /, ''), 
    'title' => element.css('a:last-child').text.sub(/\AArt. \d+ |\A\d+/, '') 
    } 
end 
puts articles_hash 

# [ 
# {"number"=>"1", "title"=>"Objet"}, 
# {"number"=>"2", "title"=>"Causes de nature internationale"}, 
# {"number"=>"3", "title"=>"Organisation des tribunaux et des autorit\u00E9s de conciliation"}, 
# ... 
# ] 

Diese iteriert und wird bis zum Artikel # 407

+0

Haben Sie alle Daten innerhalb des Arrays wirklich als Variablen? –

Verwandte Themen