2017-11-14 15 views
-1

저는 법안을 다 써 버리려하고 있습니다. 여기서 코드 발췌있다 : 코드 부분이 각 문서에 대해 반복된다Nokogiri가 임의의 노드를 대체합니다.

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

(천 위에 될 수있다) 만, 그 구조는 기본적으로 동일한 패턴을 따른다.

나는 같은 배열을 구축하기 위해 노력하고있어 :

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

그래서 분명 나는 적절한 것 같다 노코 기리, 바라 보았다. 여기에 문제가 있지만 다음과 같습니다

  • h1 = @doc.at_xpath "//sup/a" h1.content = " "

  • 모든 spana 태그 궁극적으로

  • 을 제거 할 필요가 공백 ("") =>로 대체 할 필요가 <sup><a href="#fn-#a340-1">1</a></sup>이 작품 h5 태그 안에있는 것만 유지하십시오. (다른 부풀림도 필요하지 않으므로 필요하지 않습니다.) =>.css("h5").text

필자는 본질적으로 위의 모든 것에 도달 할 수 있었지만, 어쨌든 논리적 인 소프트웨어 하나로 연결할 수 없었습니다.

도움이 될 것입니다.

주의해야 할 점은 : 그것은 순수한 루비 수 없습니다 그래서 레일 필요 :(

+0

스크래핑하려고하는 리소스는 무엇입니까? 패턴이 있는지 살펴보고 배열을 만들려는 경우 해시이거나 해시 배열을 만들겠습니까? 또한 숫자는 340입니다. , 그리고 개체 a340, 이름도 변수가 무엇입니까? –

+0

여기에 소스에 대한 링크 : https://www.admin.ch/opc/fr/classified-compilation/20061121/index.html 실제로 해시 배열, 특히 배열 또는 기사를 목표로합니다. 객체의 이름도 변수입니다 (즉, 한 객체의 반복). –

답변

0

어쩌면 일할 수 '#lawcontent .collapseable h5'에 접근 :.

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"}, 
# ... 
# ] 

이 반복을하고 얻는 문서 #까지 407

+0

배열 내의 모든 데이터가 실제로 변수로 필요합니까? –