Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]PHP Simple HTML DOM Parser - parsowanie html
Forum PHP.pl > Forum > Przedszkole
smiesznylolek
mam taki problem chcę pobrać z gumtree z ogłoszeń dane samochodów. Nigdy nie bawiłem się żadnym parserem. Używam PHP Simple HTML DOM Parser, mam taki fragment kodu

  1. <?php
  2.  
  3. include 'simple_html_dom.php';
  4.  
  5. $html = file_get_html('http://krakow.gumtree.pl/c-Samochody-Sprzedam-samochody-osobowe-VOLVO-V50-xsenon-W0QQAdIdZ365180663');
  6. foreach($html->find('td.first_col') as $key => $element)
  7. {
  8. echo $element."<br>";
  9. if($key==7) break;
  10. }

I jak odpalę skrypt to
pojawia mi się tylk to:
Cena
Adres
Na sprzedaĹź przez
Marka
Model
Rok
Kilometry

a nie pojawiają mi się dane, nie wiem co źle robię, nie mogę wyciągnąć tych danych które są w samych <td></td> jak cena czy rok itp...

tutaj fragment kodu źródłowego z gumtree który chę sparsować
  1. <tr>
  2. <td nowrap valign=top class="first_col " >Marka
  3. </td>
  4. <td > <a href='http://krakow.gumtree.pl/f-Samochody-Sprzedam-samochody-osobowe-Volvo-W0QQAQ5fCarMakeZvolvoQQCatIdZ9026' class='mmlink'>Volvo</a> </td>
  5. </tr>
  6. <tr>
  7. <td nowrap valign=top class="first_col " >Model
  8. </td>
  9. <td > <a href='http://krakow.gumtree.pl/f-Samochody-Sprzedam-samochody-osobowe-Volvo-V50-W0QQAQ5fCarMakeZvolvoQQAQ5fCarModelZv50QQCatIdZ9026' class='mmlink'>V50</a> </td>
  10. </tr>
  11. <tr>
  12. <td nowrap valign=top class="first_col " >Rok
  13. </td>
  14. <td > 2004 </td>
  15. </tr>
  16. <tr>
  17. <td nowrap valign=top class="first_col " >Kilometry
  18. </td>
  19. <td > 152000 </td>
  20. </tr>


maviozo
Logiczne, że pobiera tylko pierwszą kolumnę, przecież podałeś wyraźnie selektor "td.first_col". Powinieneś szukać bardziej w stylu "tr td + td"
smiesznylolek
Cytat(maviozo @ 22.03.2012, 11:48:05 ) *
Logiczne, że pobiera tylko pierwszą kolumnę, przecież podałeś wyraźnie selektor "td.first_col". Powinieneś szukać bardziej w stylu "tr td + td"

Ale właśnie o to chodzi że nie wiem za bardzo w jaki sposób mogę to zrobić...
maviozo
Może warto poczytać pomoc odnośnie biblioteki którą dołączasz, ewentualnie o selektorach css? Poza tym, wypróbowałeś chociaż moje rozwiązanie? Można sporóbować jeszcze użycie tyldy, bądź wyszukiwanie wyłącznie danej tabeli i wierszy, a już w pętli odnaleźć drugą komórkę wiersza...
smiesznylolek
tak jak pisałeś nie działało, ale już sobie poradziłem. Tworzy mi sie tabela z danymi które mnie interesują. Tylko teraz zastanawiam się jak rozwiązać problem z wrzuceniem tego co sparsowałem do bazy danych...
to mój kod:
  1. <?php
  2. include_once('simple_html_dom.php');
  3.  
  4. function scraping_IMDB($url) {
  5.  
  6. $html = file_get_html($url);
  7.  
  8. $ret['Title'] = $html->find('title', 0)->plaintext;
  9. $ret['Cena'] = $html->find('tr td', 51)->plaintext;
  10. $ret['Marka'] = $html->find('tr td', 57)->innertext;
  11. $ret['Model'] = $html->find('tr td', 59)->innertext;
  12. $ret['Rok'] = $html->find('tr td', 61)->plaintext;
  13. $ret['Przebieg'] = $html->find('tr td', 63)->plaintext;
  14. $ret['Skrzynia'] = $html->find('tr td', 69)->plaintext;
  15. $ret['Data dodania'] = $html->find('tr td', 49)->plaintext;
  16.  
  17.  
  18. $html->clear();
  19. unset($html);
  20.  
  21. return $ret;
  22. }
  23. // -----------------------------------------------------------------------------
  24. $ret = scraping_IMDB('http://krakow.gumtree.pl/c-Samochody-Sprzedam-samochody-osobowe-VOLVO-V50-xsenon-W0QQAdIdZ365180663');
  25.  
  26. echo "<table>" ;
  27. echo "<tr><td>opis</td> <td>dane</td></tr>";
  28. foreach($ret as $k=>$v)
  29.  
  30.  
  31. echo "<tr><td> $k </td><td> $v </td><tr>";
  32. "</table>"
  33. ?>
  34.  


wynikiem tego jest coś mniej więcej takiego:

  1. opis dane
  2. Title VOLVO V50 xsenon - Samochody Osobowe Auto Moto Sprzedam- Gumtree Małopolskie / Kraków
  3. Cena 25 900,00
  4. Marka Volvo
  5. Model V50
  6. Rok 2004
  7. Przebieg 152000
  8. Skrzynia Manualna
  9. Data dodania 22/03/2012
zaciakawion
Notabene: A regulamin gumtree nic przeciw takim praktykom nie ma??
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.