Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne] Jak wydostać interesujące dane ze strony www?
Forum PHP.pl > Forum > Przedszkole
Rysh
Witam, potrzebuję pomocy, jak wydostać z kodu HTML interesujące mnie dane. Otóż pobieram stronę www, za pomocą wget, teraz chciałbym obrobić ten pliczek i wydostać z niego opis produktu, aktualną cenę oraz dostępność. Jako, iż produktów jest 13000 ręczne dodawanie odpada. Próbowałem grep'a jednak on jedynie pokazuję mi linijkę w której jest dany wyraz. Początek jest, jednak teraz potrzebuję pomocy, co dalej jakich narzędzi? Chciałbym do tego nie mieszać PHP i zrobić to za pomocą samego BASH'a. Nigdy wcześniej nie używałem wyrażeń regularnych, a jak już to tylko przykładów z internetu.

  1. <span class='pogr'>Producent: xyz</span><hr/><br /><span class='pogr'>Dostępność:</span><br /><div><img src='http://strona.xyz/stan0.png'></div><hr/><br/><span class='pogr'>Cena (szt.) : </span> 10.46 PLN<hr /><hr /><div>(ABC0001) Nazwa produktu</div>


PS. Mam nadzieję, że nikt mnie nie wygodni z forum za taki temat na takim forum smile.gif

Pozdrawiam.
Helid
  1. <?php
  2. $date = "<span class='pogr'>Producent: xyz</span><hr/><br /><span class='pogr'>Dostępność:</span><br /><div><img src='http://strona.xyz/stan0.png'></div><hr/><br/><span class='pogr'>Cena (szt.) : </span> 10.46 PLN<hr /><hr /><div>(ABC0001) Nazwa produktu</div>";
  3.  
  4. if(preg_match("/<span class='pogr'>Producent: (.*)<\/span>/", $date, $found))
  5. {
  6. print_r($found);
  7. }


Coś na wzór tego.
PrinceOfPersia
w czystym Bashu pewnie można by użyć awk, taka ni to komenda, ni język. Nie wiem jak działa, ale kiedyś za pomocą googla coś mi się udało zrobić w tym więc chyba nie jest trudne.

Albo w PHP, za pomocą klasy DomDocument:
  1. $document = new DomDocument();
  2. $document->loadHTML(file_get_contents("TUTAJ_NAZWA_PLIKU.html"));
  3. $elements = $document->getElementsByTagName('*');
  4. $lista = array();
  5. foreach ($elements as $el) {
  6. $class = $el->getAttribute('class');
  7. $tag = $el->tagName;
  8. $content = $el->textContent;
  9. $lista[] = array('class' => $class, 'tag'=>$tag, 'content'=> $content);
  10. }
  11.  


a potem w zmiennej $lista masz już ładnie ułożoną tablicę sparsowanych danych. Możesz je np. wylistować i dalej coś z nimi robić, np.:

  1. echo "<ol>";
  2. foreach ($lista as $row) {
  3. if ($row['class']=='pogr')
  4. echo "<li style='color:red'>";
  5. else echo "<li>";
  6. echo "Tag:" . $row['tag'] . ", klasa: " . $row['class'];
  7. echo " Tresc: <em>" . $row['content'] . "</em>";
  8. echo "</li>";
  9. }
  10. echo "</ol>";


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.