Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyciąganie danych preg_match_all() ignorując białe znaki i tagi html
Forum PHP.pl > Forum > PHP
shakugan45
Witam, mam taki oto skrypt który ma za zadanie wyciągać z podstron innego serwisu pewne informacje, a mianowicie: adres do miniatury serialu, ilość odcinków, gatunki, czas trwania odcinka, typ serialu, jego status oraz producentów.
O ile typ i status wyciągam poprawnie, tak sprawa komplikuje się przy reszcie informacji - między tagami html występują taby, białe znaki, znaki nowej linii itd. Przykładowo:
  1. <h2>Information</h2>
  2. <div><span class="dark_text">Type:</span> TV</div>
  3. <div class="spaceit"><span class="dark_text">Episodes:</span> 25
  4. </div>
  5. <div><span class="dark_text">Status:</span> Finished Airing</div>
  6. <div class="spaceit"><span class="dark_text">Aired:</span> Jul 8, 2012 to Dec 23, 2012</div>
  7. <div><span class="dark_text">Producers:</span> <a href="http://myanimelist.net/anime.php?p=17">Aniplex</a>, <a href="http://myanimelist.net/anime.php?p=56">A-1 Pictures</a>, <a href="http://myanimelist.net/anime.php?p=79">Genco</a>, <a href="http://myanimelist.net/anime.php?p=315">DAX Production</a>, <a href="http://myanimelist.net/anime.php?p=493">Aniplex of America</a><sup><small>L</small></sup>, <a href="http://myanimelist.net/anime.php?p=681">ASCII Media Works</a></div><div class="spaceit"><span class="dark_text">Genres:</span>
  8. <a href="http://myanimelist.net/anime.php?genre[]=1">Action</a>, <a href="http://myanimelist.net/anime.php?genre[]=2">Adventure</a>, <a href="http://myanimelist.net/anime.php?genre[]=10">Fantasy</a>, <a href="http://myanimelist.net/anime.php?genre[]=11">Game</a>, <a href="http://myanimelist.net/anime.php?genre[]=22">Romance</a>, <a href="http://myanimelist.net/anime.php?genre[]=27">Shounen</a></div><div><span class="dark_text">Duration:</span>
  9. 23 min. per episode</div><div class="spaceit"><span class="dark_text">Rating:</span>
  10. PG-13 - Teens 13 or older</div>


Jak przerobić ten skrypt aby poprawnie pobierał dane które wymieniłem do zmiennych, bez znaczników html?


  1. function anime_bigimg($animeid)
  2. {
  3. polacz_mysql('infobase');
  4. $query="SELECT * FROM anime WHERE id='".$animeid."'";
  5. $wynik=mysql_query($query);
  6. $lineend="\r\n";
  7. $tytul=mysql_result($wynik,0,'tytul');
  8. $mal=mysql_result($wynik,0,'linkmal');
  9. $mal=trim(mysql_result($wynik,0,'linkmal'));
  10. $baseurl="http://myanimelist.net/anime/{$mal}";
  11. $ch = curl_init();
  12. curl_setopt($ch, CURLOPT_URL, $baseurl);
  13. curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 5.1; Edition Campaign 21) Presto/2.12.388 Version/12.14');
  14. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  15. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  16. curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__file__) . '/cookies.txt');
  17. curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__file__) . '/cookies.txt');
  18. $pg = curl_get_page($ch);
  19. while (strpos($pg, 'getSessionCookies') !== false)
  20. {
  21. $pg = curl_get_page($ch);
  22. }
  23. curl_close($ch);
  24. //preg_match_all('|<img src="http://cdn.myanimelist.net/images/anime/(.+?)" alt="|', $pg, $bigimg);
  25. preg_match_all('|Episodes:</span> (.+?) </div>|', $pg, $ilosc);
  26. preg_match_all('|Genres:</span> (.+?)</div>|', $pg, $tagi);
  27. preg_match_all('|Duration:</span> (.+?)</div>" alt="|', $pg, $trwanie);
  28. preg_match_all('|Type:</span> (.+?)</div>|', $pg, $typ);
  29. preg_match_all('|Status:</span> (.+?)</div>|', $pg, $status);
  30. preg_match_all('|Producers:</span> (.+?)</div>|', $pg, $studio);
  31. echo $ilosc[1][0].'<br>';
  32. echo strip_tags($tagi[1][0]).'<br>';
  33. echo $trwanie[1][0].'<br>';
  34. echo $typ[1][0].'<br>';
  35. echo $status[1][0].'<br>';
  36. echo strip_tags($studio[1][0]).'<br>';
  37. }


Przykładowa strona z której będą pobierane dane: http://myanimelist.net/anime/11757/Sword_Art_Online (na każdej tego typu karcie filmu białe znaki, tagi html i spacje występują w takiej samej formie)

Z góry dzięki.
shakugan45
Dzięki, pomogło.
Jeszcze jedno pytanie. Tak jak widać w tym html'u mamy coś takiego: Aniplex of America</a><sup><small>L</small></sup>
W jaki sposób poprawić tą linijkę żeby preg_match_all ignorował każde wystąpienie czegoś takiego? <sup><small>L</small></sup>
  1. preg_match_all('|Producers:</span> (.+?)</div>|m', $pg, $studio);
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.