2016-06-19 2 views
-2

Nokogiri를 사용하여 사이트에서 일부 정보를 긁어 내려고합니다.nokogiri로 모든 페이지 대신 특정 항목에만 액세스하는 방법

이 사이트는 다음과 같습니다

내 코드는 다음과 같습니다
<div class="content"> 
    <article class="mainarticle"> 
    <div class="breadcrump"> 
     <ul></ul> 
    </div> 
    <div class="boxstyle"> 
     <h2 style="margin-top:0.1em;">Fahrschulen mit Namen "Hugis Fahrschule AG"</h2> 
    </div> 
    <section class="leftrightleft "> 
     <header> 
     <div class="borderright borderbottom pads"> 
      <figure class="logoschule"> 
      <a href="fahrlehrerbilder.php?irat_id=14581" onclick="showGallery('irat_gallery',14581);return false;"> 
       <img alt="Bilder Hugis Fahrschule AG" width="110" height="110" src="http://www.fahrlehrervergleich.ch/images/lehrer/small/fe1774780ba2d3aaa3e985ee960bf8.jpg"> 
       <figcaption class="gallerylabel minhide">1 Bild</figcaption> 
      </a> 
      </figure> 
      <div> 
      <h3><a href="http://www.fahrlehrervergleich.ch/fahrschule-Hugis-Fahrschule-AG-Z%C3%BCrich-fahrschule-14581.htm" target="_self" title="Hugis Fahrschule AG">Hugis Fahrschule AG</a></h3> 
      <h4 style="padding:0;line-height:1.3em;">Thomas Hugelshofer</h4> 
      <span class="biger">Thomas Hugelshofer</span> 
      <p><span>Oerlikon</span><br><span>Schaffhauserstrasse 443</span><br><span>8050</span> <span>Zürich</span></p> 
      <p><a href="karte.php?i=14581" target="_blank" onclick="showMap(14581);return false;">Karte</a> &nbsp;<a href="streetview.php?i=14581" target="_blank" onclick="showStreetview(14581);return false;">Streetview</a> &nbsp;</p> 
      <p></p> 
      </div> 
      <table class="eintraegemain clearfix"> 
      <tbody> 
       <tr> 
       <td>Homepage:</td> 
       <td><a href="fahrlehrervergleich.php?web=14581" target="_blank"><span>www.hugis-fahrschule.ch</span></a></td> 
       </tr> 
       <tr> 
       <td>E-Mail:</td> 
       <td><a class="" href="kontakt_user.php?kontakt_id=14581" target="_blank" onclick="showEmailSender(14581);return false;">[email protected]</a></td> 
       </tr> 
       <tr> 
       <td>Natel:</td> 
       <td><span>076 684 11 11</span></td> 
       </tr> 
      </tbody> 
      </table> 
     </div> 
     </header> 
     <div class="accordion"> 
     <div class="accordion-section"> 
      <a class="accordion-section-title accordeonfarbe-00" href="#accordion-1-14581"><span class="arrow"></span>Preise für Auto: ab 74.-, Auto Automat: ab 74.-, Motorrad: 90...</a> 
      <section id="accordion-1-14581" class="secondright accordion-section-content"> 
      <div class="borderleft pads"> 
       <table> 
       <tbody> 
        <tr> 
        <td>Kategorien</td> 
        <td>Preise CHF</td> 
        </tr> 
        <tr> 
        <td>Auto:</td> 
        <td>ab 74.-</td> 
        </tr> 
        <tr> 
        <td>Auto&nbsp;Automat:</td> 
        <td>ab 74.-</td> 
        </tr> 
        <tr> 
        <td>Motorrad:</td> 
        <td>90.-</td> 
        </tr> 
        <tr> 
        <td>Taxi:</td> 
        <td>74.-</td> 
        </tr> 
        <tr> 
        <td>Lastwagen:</td> 
        <td>165 .-</td> 
        </tr> 
        <tr> 
        <td>Lastwagen&nbsp;C1:</td> 
        <td>165.-</td> 
        </tr> 
        <tr> 
        <td>Auto&nbsp;Anhänger:</td> 
        <td>112.-</td> 
        </tr> 
        <tr> 
        <td>LKW&nbsp;Anhänger:</td> 
        <td>195.-</td> 
        </tr> 
        <tr> 
        <td>Car:</td> 
        <td>195.-</td> 
        </tr> 
        <tr> 
        <td style="font-weight:normal;">Lektionsdauer:</td> 
        <td style="font-weight:normal;">45 Minuten</td> 
        </tr> 
       </tbody> 
       </table> 
       <table> 
       <tbody> 
        <tr> 
        <td>Kurse</td> 
        <td>Preise CHF</td> 
        </tr> 
        <tr> 
        <td>Verkehrskunde:</td> 
        <td>150.-</td> 
        </tr> 
        <tr> 
        <td>Nothelferkurs:</td> 
        <td>120.-</td> 
        </tr> 
        <tr> 
        <td>Motorrad&nbsp;Grundkurs:</td> 
        <td>160 pro Teil</td> 
        </tr> 
        <tr> 
        <td>Theorie:</td> 
        <td>Nach Anmeldung</td> 
        </tr> 
       </tbody> 
       </table> 
      </div> 
      </section> 
     </div> 
     <div class="accordion-section"> 
      <a class="accordion-section-title accordeonfarbe-00" href="#accordion-2-14581"><span class="arrow"></span>Weitere Informationen: Sprachen: Deutsch, Englisch...</a> 
      <section id="accordion-2-14581" class="thirdleft accordion-section-content"> 
      <div class="borderright pads"> 
       <table id="sb_14581"> 
       <tbody> 
        <tr> 
        <td>Sprachen: </td> 
        <td>Deutsch, Englisch, Serbisch, Albanisch, Türkisch, Polnisch, Italienisch</td> 
        </tr> 
        <tr> 
        <td>Autotyp:</td> 
        <td>Renauld Megan</td> 
        </tr> 
        <tr> 
        <td>Administration:</td> 
        <td>CHF 110.- (pauschal)</td> 
        </tr> 
        <tr> 
        <td>Jahrgang:</td> 
        <td>2015</td> 
        </tr> 
        <tr> 
        <td>Ausbildungsjahr:</td> 
        <td>2015</td> 
        </tr> 
       </tbody> 
       <tbody></tbody> 
       </table> 
      </div> 
      </section> 
     </div> 
     <footer class="clearfix"> 
      <section> 
      <div class="bordertop pads" id="sbwl_14581"> 
       <div class="ratingoutside"> 
       <ul class="rating"> 
        <li class="icon icon-star-two"></li> 
        <li class="icon icon-star-two"></li> 
        <li class="icon icon-star-two"></li> 
        <li class="icon icon-star-two"></li> 
        <li class="icon icon-star-two"></li> 
        <li class="icon icon-star-two"></li> 
        <li><a href="bewertungen.php?irat=14581" onclick="showBewe(14581);return false;" title="12 Bewertungen anschauen" style="text-decoration:none;">(12)</a></li> 
       </ul> 
       </div> 
       <div class="rightbuts"><a class="buttonsmall" href="bewertungen.php?irat=14581" onclick="showBewe(14581);return false;" title="Bewertungen anschauen">Bewertungen anschauen</a> 
       <a class="buttonsmall" href="lernen/index.php?bewe_irat=14581">Fahrlehrer bewerten</a> 
       </div> 
       <p class="clicks minhide clearfix"> 30-Tage-Statistik : Inserat <span class="num_imp">14069</span> Mal angezeigt, Homepage <span class="num_click">228</span> Mal angeklickt. (<a href="sponsored.php" target="_blank" onclick="loadSponsored();return false;">sponsored</a>)</p> 
      </div> 
      </section> 
     </footer> 
     </div> 
    </section> 
    <section class="leftrightleft "> 
     <header> 
     <div class="borderright borderbottom pads"> 
      <div> 
      <h3><a href="http://www.fahrlehrervergleich.ch/fahrschule-Hugis-Fahrschule-AG-Adlikon+b.+Regensdorf-fahrschule-13695.htm" target="_self" title="Hugis Fahrschule AG">Hugis Fahrschule AG</a></h3> 
      <h4 style="padding:0;line-height:1.3em;">Thomas Hugelshofer</h4> 
      <span class="biger">Thomas Hugelshofer</span> 
      <p><span>8106</span> <span>Adlikon b. Regensdorf</span></p> 
      </div> 
      <table class="eintraegemain clearfix"> 
      <tbody></tbody> 
      </table> 
     </div> 
     </header> 
     <div class="accordion"> 
     <div class="accordion-section"> 
      <a class="accordion-section-title accordeonfarbe-00" href="#accordion-1-13695"><span class="arrow"></span>Preise für Auto: 84.-, Motorrad: 90.-, Taxi: 95.-, Lastwagen:...</a> 
      <section id="accordion-1-13695" class="secondright accordion-section-content"> 
      <div class="borderleft pads"> 
       <table> 
       <tbody> 
        <tr> 
        <td>Kategorien</td> 
        <td>Preise CHF</td> 
        </tr> 
        <tr> 
        <td>Auto:</td> 
        <td>84.-</td> 
        </tr> 
        <tr> 
        <td>Motorrad:</td> 
        <td>90.-</td> 
        </tr> 
        <tr> 
        <td>Taxi:</td> 
        <td>95.-</td> 
        </tr> 
        <tr> 
        <td>Lastwagen:</td> 
        <td>165.-</td> 
        </tr> 
        <tr> 
        <td>Lastwagen&nbsp;C1:</td> 
        <td>165.-</td> 
        </tr> 
        <tr> 
        <td>Auto&nbsp;Anhänger:</td> 
        <td>112.-</td> 
        </tr> 
        <tr> 
        <td>LKW&nbsp;Anhänger:</td> 
        <td>195.-</td> 
        </tr> 
        <tr> 
        <td>Car:</td> 
        <td>195.-</td> 
        </tr> 
       </tbody> 
       </table> 
       <table> 
       <tbody> 
        <tr> 
        <td>Kurse</td> 
        <td>Preise CHF</td> 
        </tr> 
        <tr> 
        <td>Verkehrskunde:</td> 
        <td>150.-</td> 
        </tr> 
        <tr> 
        <td>Motorrad&nbsp;Grundkurs:</td> 
        <td>160.-</td> 
        </tr> 
       </tbody> 
       </table> 
      </div> 
      </section> 
     </div> 
     <div class="accordion-section"> 
      <a class="accordion-section-title accordeonfarbe-00" href="#accordion-2-13695"><span class="arrow"></span>Weitere Informationen: Sprachen: Deutsch, Englisch...</a> 
      <section id="accordion-2-13695" class="thirdleft accordion-section-content"> 
      <div class="borderright pads"> 
       <table id="sb_13695"> 
       <tbody> 
        <tr> 
        <td>Sprachen: </td> 
        <td>Deutsch, Englisch, Französisch, Italienisch, Polnisch, Türkisch</td> 
        </tr> 
        <tr> 
        <td>Autotyp:</td> 
        <td>VW, BMW, MAN, SETRA, </td> 
        </tr> 
       </tbody> 
       <tbody></tbody> 
       </table> 
      </div> 
      </section> 
     </div> 
     <footer class="clearfix"> 
      <section> 
      <div class="bordertop pads" id="sbwl_13695"> 
       <div class="ratingoutside"> 
       <ul class="rating"> 
        <li class="icon icon-star-two"></li> 
        <li class="icon icon-star-two"></li> 
        <li class="icon icon-star-two"></li> 
        <li class="icon icon-star-two"></li> 
        <li class="icon icon-star-two"></li> 
        <li class="icon icon-star-two"></li> 
        <li><a href="bewertungen.php?irat=13695" onclick="showBewe(13695);return false;" title="12 Bewertungen anschauen" style="text-decoration:none;">(12)</a></li> 
       </ul> 
       </div> 
       <div class="rightbuts"><a class="buttonsmall" href="bewertungen.php?irat=13695" onclick="showBewe(13695);return false;" title="Bewertungen anschauen">Bewertungen anschauen</a> 
       <a class="buttonsmall" href="lernen/index.php?bewe_irat=13695">Fahrlehrer bewerten</a> 
       </div> 
       <p class="clicks minhide clearfix"> 30-Tage-Statistik : Inserat 307 Mal angezeigt. </p> 
      </div> 
      </section> 
     </footer> 
     </div> 
    </section> 
    <ul class="paginator"></ul> 
    <section class="texttabs clearfix"> 
     <p> 
     Fahrschulen in der Schweiz: Fahrschulen und Fahrlehrer für Auto, Motorrad, Lastwagen, Taxi und Boot. Verkehrskunde (VKU), Nothelferkurs, Motorradgrundkurs. Informationen zu Strassenverkehrsamt, Lernfahrausweis, Fahrprüfung, WAB hier im Schweizer Fahrlehrervergleich.       
     </p> 
     <p> 
     Der Schweizer Fahrlehrervergleich gibt Auskunft über Fahrschulen und Fahrlehrer, die in folgenden Kategorien unterrichten: Auto, Motorrad, Lastwagen, Taxi und Boot. Ebenfalls werden Angaben über Verkehrtheorie, Motorradgrundkurs, Nothelferkurs und Theorietraining gemacht. Finden Sie eine Auto-, Motorrad- oder Lastwagen-Fahrschule, Informationen zu Ausbildung, Grundkurs, Theoriekurs, Schleuderkurs und Autoprüfung. Fahrschule Fahrschulen Fahrlehrer Zürich Bern Basel Luzern Aargau Schweiz. Der Schweizer Fahrlehrervergleich beinhaltet über 5000 Fahrschulen und Fahrlehrer aus der ganzen Schweiz.       
     </p> 
    </section> 
    </article> 
    <aside> 
    <h2>Fahrlehrer und Fahrschulen finden</h2> 
    <section class="filterbox regone boxstyle"> 
     <h3>Fahrschulen </h3> 
     <ul> 
     <li><a title="Fahrschule Hugis Fahrschule AG" href="http://www.fahrlehrervergleich.ch/fahrschule-Hugis-Fahrschule-AG-Z%C3%BCrich-fahrschule-14581.htm">Hugis Fahrschule AG</a></li> 
     <li><a title="Fahrschule Hugis Fahrschule AG" href="http://www.fahrlehrervergleich.ch/fahrschule-Hugis-Fahrschule-AG-Adlikon+b.+Regensdorf-fahrschule-13695.htm">Hugis Fahrschule AG</a></li> 
     </ul> 
    </section> 
    <section class="filterbox regone boxstyle"> 
     <h3>Sprachauswahl</h3> 
     <ul> 
     <li><a hreflang="de" href="http://www.fahrlehrervergleich.ch" title="Schweizer Fahrlehrervergleich">Schweizer Fahrlehrervergleich</a></li> 
     <li><a hreflang="fr" href="http://auto-ecole.comparatif.ch" title="Comparatif d'auto-écoles suisses">Comparatif d'auto-écoles suisses</a></li> 
     <li><a hreflang="it" href="http://autoscuola.comparazione.ch" title="Confronto delle autoscuole svizzere">Confronto delle autoscuole svizzere</a></li> 
     <li><a hreflang="en" href="http://driving-instructor.fahrlehrervergleich.ch" title="Swiss Driving Instructors">Swiss Driving Instructors</a></li> 
     </ul> 
    </section> 
    <section class="filterbox regone boxstyle"> 
     <h3>Siehe auch...</h3> 
     <ul> 
     <li> 
      <a href="http://www.zahnarztvergleich.ch" title="Schweizer Zahnarztvergleich"> 
      Schweizer Zahnarztvergleich       </a> 
     </li> 
     <li> 
      <a href="http://www.treuhandvergleich.ch" title="Schweizer Treuhandvergleich"> 
      Schweizer Treuhandvergleich       </a> 
     </li> 
     <li> 
      <a href="http://www.anwaltvergleich.ch" title="Schweizer Anwaltvergleich"> 
      Schweizer Anwaltvergleich       </a> 
     </li> 
     <li> 
      <a href="http://www.coiffeurvergleich.ch" title="Schweizer Coiffeurvergleich"> 
      Schweizer Coiffeurvergleich       </a> 
     </li> 
     </ul> 
    </section> 
    </aside> 
</div> 

:

doc = Nokogiri::HTML(page) 
doc.css(".leftrightleft").each do |item| 
    title = item.at_css("h3 a").text 
    address = item.at_css(".biger+ p , h3+ p") 
    address.search('br').each do |n| 
    n.replace(" ") 
    end 
    address = address.text 

    puts "-----" 
    puts title 
    puts "Address:" 
    puts address 
    puts "Course Types:" 

    item.css("table+ table tr+ tr").each do |type_price| 
    if type_price.css("td")[0] && type_price.css("td")[1] != nil 
     course_type = type_price.css("td")[0].text 
     course_type.gsub!(":", "") 
     price = type_price.css("td")[1].text 
     puts "\t #{course_type}: #{price}" 
    end 
    end 
end 

문제는 내가 item.css("table+ table tr+ tr").each do |type_price|을 할 때 그 하나뿐만 아니라 아래의 모든 항목을하고있어 것입니다 특정 항목에 대한

누군가 내가 잘못하고있는 것을 설명 할 수 있습니까?

+1

데이터 링크를 사용하지 마십시오. 대신 문제를 시연하는 데 필요한 것만 빼고 그 질문에 포함 시키십시오. 링크 썩은 다음 휴식, 그 결과가 귀하의 질문에 아무 입력이 없어, 그 쓸모없는 사람들이 미래에 비슷한 솔루션을 찾고 있습니다. –

+0

죄송합니다. 내 질문을 업데이 트 – InesM

+0

문제는, 거기에 입력 데이터 (최소한의 HTML) 문제를 입증하는 데 도움이되지 않습니다/우리가 그것을 테스트하고 싶다면 코드를 실행할 수/사용할 수 있습니다. "[mcve]"는 그것들에 대해 명확합니다. 우리가 도와 줘야 해. –

답변

0

이 문제를 해결할 방법을 찾았습니다.

이 루프를 만드는 대신에 item.css("table+ table tr+ tr").each do |type_price|이라는 항목을 사용하면 페이지의 끝까지 모든 페이지에 루프가 만들어 지므로이 코드를 item.at_css("table+ table tbody").css("tr+ tr").each과 같이 처리하고 있습니다.

이 솔루션을 사용하면 첫 번째 테이블 요소를 얻은 다음 나머지 행을 반복하여 작동합니다.

0

나는 Nokogiri가 이상한 마크 업으로 인해 요소를 엉망으로 만들고있는 것처럼 보였다.

require 'nokogumbo' 
doc = Nokogiri::HTML5.get(uri) 

내가 정말 libxml가 노코 기리보다는 jumbling을하고 말을해야 : HTML5로 전환

아마 가장 좋은 방법입니다.

+0

"정말로 libxml이 혼란을 일으키고 있다고 말해야합니다 ..."네. Nokogiri는 메신저입니다. –