Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Robot parsujący tabele
Forum PHP.pl > Forum > Przedszkole
boddah85
Pierwszy raz przyszły mi korzystać z curl i trochę się namęczyłem zanim napisałem część skryptu odpowiedzialnego za logowanie do serwisu i wysłanie formularza, który zwracałby interesujące mnie dane. Nie potrafię jednak przeskoczyć sparsowania kodu html, który dostaje w rezultacie. Jest tam dużo tabel, często zagnieżdżonych. Mnie jednak interesuje, żeby wydobyć takie dane (w poniższym przykładzie WART1 oraz WART2)

  1. <TR onmouseover=(dowolna il.znaków)><td(dowolna il.znakow - niektóre komórki mają np klase, a inne nie)>WART1</td><td(dowolna il.znakow - niektóre komórki mają np klase, a inne nie)>WART2</td></tr>


Czytałem o m.in. funkcji preg_match_all, ale kiepsko mi idzie rozwiązanie tego problemu.

Pozdrawiam
wree
Pobierz dla danego div-a który ma te tabele wszystko pomiędzy ></td>, będziesz miał array potem tylko dobierz z tablicy,

np

preg_match_all('#>(.*?)</td>#is', $tococulujesz,$tabele_td);

teraz będziesz mógł odczytać array:

print_r($tabele_td);
boddah85
Problem w tym, że cała strona jest oparta na tabelkach. Nie ma więc żadnego diva, a te tabelki nie mają żadnej klasy, tudzież id. Jedyne co dzieli tą tabelkę, która mnie interesuje od pozostałych to fakt, że w tr jest atrybut onmouseover.
wree
div, tr czy cały table to bez różnicy. Najpierw pobierz wszystko co znajduje się pomiędzy <tr onmouseover="tego nie zapisuj">(.*?)</tr> a potem to co wyżej podałem dla tego wyniku. Możesz też cały table pobrać a potem wybrać z niego to co chcesz. Albo pokaż kawałek tej strony co chcesz pobrać i to co masz obecnie zrobione, zobaczymy gdzie popełniasz błąd.
boddah85
  1. [...]
  2. <table width=100%>
  3. <tr class=coss>
  4. <td>wartosc</td>
  5.  
  6. <td align=center><b>Uwaga! </td>
  7. <td align=right>Jakis tekst
  8. </td>
  9. </tr>
  10. </table>
  11. </td>
  12. </tr>
  13. </FORM>
  14.  
  15. <tr>
  16. <td width="100%">
  17. info</td>
  18. <td align=center>kol1</td>
  19. <td align=center>kol2</td><td align=center>kol3</td><td align=center>kol4</td><td align=center>kol5</td><td align=center>kol6</td><td align=center>kol7</td><td align=right bgcolor=red>&nbsp;</td>
  20.  
  21. <TR onmouseover="this.style.backgroundColor='green';" onmouseout="this.style.backgroundColor='#FFFFFF';" bgColor=#FFFFFF>
  22. <td>wart1</td>
  23. <td>wart2</td>
  24. <td>wart3</td>
  25. <td>wart4</td>
  26. <td><a href="link">wart5</a></td>
  27. <td align="right">wart6</td>
  28. <td align="right">wart7</td>
  29. <td align=right>wart8</td>
  30.  
  31. <td align=right>
  32. </tr>
  33.  
  34. <TR onmouseover="this.style.backgroundColor='red';" onmouseout="this.style.backgroundColor='#FFFCE6';" bgColor=#FFFCE6>
  35. <td>wart1</td>
  36. <td>wart2</td>
  37. <td>wart3</td>
  38. <td>wart4</td>
  39. <td><a href="link">wart5</a></td>
  40. <td align="right">wart6</td>
  41. <td align="right">wart7</td>
  42. <td align=right>wart8</td>
  43.  
  44.  
  45. </tr>
  46. [...]


Chodzi o to, żeby wyciągnąć wart1-8 z kazdego ze zwróconych wierszy.
Crozin
A może by tak jakieś normalne rozwiązanie?
wree
Napisałem ci abyś podał kod i napisał co masz gotowe abyśmy mogli poprawić twój błąd... nie napisałeś co masz... podaj to co sam wykombinowałeś i 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.