Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pobieranie danych z html
Forum PHP.pl > Forum > PHP
mrm
witam, chciałem pobierać dane z innej strony i przetwarzać je na własnej, dane pobieram za pomocą curl, następnie wycinam za pomocą wyrażeń regularnych wiekszosc rzeczy, zostaje mi "surowa tabela"

jej schemat wygląda mniej więcej tak:

  1. <table class="tablehead" cellpadding="3" cellspacing="1"><tr class="stathead"><td colspan="6">February 28, 2009</td></tr><tr class="colhead"><td width="25">Rank</td><td>Team</td><td style="text-align:right;">Games</td><td style="text-align:right;">Atrybut 1</td><td style="text-align:right;">Atrybut 2</td></tr>
  2. <tr class="oddrow">
  3. <td align="right">1</td>
  4. <td align="left"><a href="/team?id=138&cc=5739">Dallas Stars</a></td>
  5. <td align="right">10</td>
  6. <td align="right">2</td>
  7. <td align="right">36</td>
  8. </tr>
  9.  
  10. <tr class="evenrow">
  11. <td align="right">2</td>
  12. <td align="left"><a href="/team?id=129&cc=5739">New York Rangers</a></td>
  13. <td align="right">10</td>
  14. <td align="right">0</td>
  15. <td align="right">40</td>
  16. </tr>
  17.  
  18. <tr class="oddrow">
  19. <td align="right">3</td>
  20. <td align="left"><a href="/team?id=131&cc=5739">St. Louis Blues</a></td>
  21. <td align="right">9</td>
  22. <td align="right">4</td>
  23. <td align="right">41</td>
  24. </tr>
  25.  
  26. </table><table cellspacing="1" cellpadding="3" class="tablehead"><tr class="oddrow"><td align="center">NHL</td></tr></table><!-- end tables -->

teraz chciałbym przetworzyć te dane aby otrzymać tablice

$tablica = array("druzyna" => "Dallas Stars", "games" => "10", "atrybut 1" => "2", "atrybut 2" => "36");

z góry dzięki za pomoc
bełdzio
np. regExpem
Kod
<td align="(left|right)">(.*?)</td>
wyciągnij wszystkie wartości, a nastepnie w w petli rozdzielaja je na 5 elementowe paczki
mrm
dobra, dzieki , będę kombinował, zobaczymy co wyjdzie z tego winksmiley.jpg

zrobiłem to w ten sposób, wszystko działa, niestety nie jest to optymalny kod

  1. <?php
  2. $patterns[0] = '<td align="right">';
  3.          $patterns[1] = '<td align="left">';
  4.  
  5.          $replacements[2] = 'td';
  6.          $replacements[1] = 'td';
  7.          
  8.          $ciag =  preg_replace($patterns, $replacements, $ciag);
  9.          
  10. //powyżej zamieniam <td align="right"> i <td align="left"> na <td>, nie rozumiem dlaczego zmienne $replacements[2] i [1] zawieraja wartosc td a //nie <td>, wolalbym też połączyć <td align="right"> i <td align="left">, tak aby regula brzmiala jesli ciag zawiera <td align="left">
  11. //lub <td align="left"> lub <td align="center"> to zamien na <td>
  12.          
  13.  
  14.          $ciag  = str_replace("<td></td>", "<td>---</td>", $ciag);
  15.          
  16.  
  17.          preg_match_all('|<td>(.+?)</td>|',
  18.          "'.$ciag.'",
  19.          $wynik);
  20.          
  21. //tutaj wyciagam dane ktore znajduja sie w <td></td>, niestety czasami tabele ze zrodlem nie zawieraja zadnej wartosci miedzy <td></td> gdy tak //sie dzieje wszystko sie rozsypywalo, stad operacja  $ciag  = str_replace("<td></td>", "<td>---</td>", $ciag); , mimo wszystko walalbym to //napisac w jednym poleceniu wykorzsytujac preg_match_all
  22.          
  23. //kolejna sprawa ze tablica $wynik zawiera 2 tablice, nie ma problemu zebym odwolal sie do $wynik[0], (jest tez identyczna $wynik[1]), ale //wolalbym miec jedna tablice
  24. ?>


gdyby ktos mogl mi pomoc bylbym wdzieczny
zegarek84
  1. <?php
  2. $text='<table class="tablehead" cellpadding="3" cellspacing="1"><tr class="stathead"><td colspan="6">February 28, 2009</td></tr><tr class="colhead"><td width="25">Rank</td><td>Team</td><td style="text-align:right;">Games</td><td style="text-align:right;">Atrybut 1</td><td style="text-align:right;">Atrybut 2</td></tr>
  3. <tr class="oddrow">
  4. <td align="right">1</td>
  5. <td align="left"><a href="/team?id=138&cc=5739">Dallas Stars</a></td>
  6. <td align="right">10</td>
  7. <td align="right">2</td>
  8. <td align="right">36</td>
  9. </tr>
  10.  
  11. <tr class="evenrow">
  12. <td align="right">2</td>
  13. <td align="left"><a href="/team?id=129&cc=5739">New York Rangers</a></td>
  14. <td align="right">10</td>
  15. <td align="right">0</td>
  16. <td align="right">40</td>
  17. </tr>
  18.  
  19. <tr class="oddrow">
  20. <td align="right">3</td>
  21. <td align="left"><a href="/team?id=131&cc=5739">St. Louis Blues</a></td>
  22. <td align="right">9</td>
  23. <td align="right">4</td>
  24. <td align="right">41</td>
  25. </tr>
  26.  
  27. </table><table cellspacing="1" cellpadding="3" class="tablehead"><tr class="oddrow"><td align="center">NHL</td></tr></table><!-- end tables -->';
  28. preg_match_all('/<tr[^0-9]+([0-9]+)<[^<]+<td[^<]+<a href[^>]+>([^<]+)</a><[^<]+<td[^0-9]+([0-9]+)<[^<]+<td[^0-9]+([0-9]+)<[^<]+<[^0-9]+([0-9]+)<[^<]+</tr>/s', $text, $matches);
  29.  
  30. echo '<pre>';
  31. print_r($matches);
  32. echo '</pre>';
  33. ?>


tu uzyskasz gotwą tablicę wyników - musisz j ą tylko przetworzyć po pętli....
mrm
dzieki wszystko dziala, mam jeszcze jedno pytanie w takim razie

  1. kod HTML
  2. <td align='right'>
  3. &nbsp;TO JEST TO CO CHCE WYCIĄGNĄĆ
  4. <TD>
  5. kod HTML


próbowałem z czymś takim ale zwraca mi pustą tablice

  1. <?php
  2. preg_match_all("|<td align='right'>(.+?)<TD>|",$string, $output);
  3. ?>


;(
bełdzio
po koncowym "|" dodaj modyfikator m dzieki, ktoremu Twoje wyrazenie bedzie dzialalo na wielu liniach
mrm
teraz jest tak

  1. <?php
  2. preg_match_all("|<td align='right'>(.+?)<TD>|m",$string, $output);
  3. ?>


niestety wciąż nie działa ...
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.