Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wyciąganie danych preg_match_all() ignorując białe znaki i tagi html
shakugan45
post 14.01.2014, 15:24:05
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 9.01.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
em1X
post 14.01.2014, 18:11:29
Post #2





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


http://php.net/manual/en/reference.pcre.pa...n.modifiers.php

Ten post edytował em1X 14.01.2014, 18:12:38


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
shakugan45
post 14.01.2014, 20:38:27
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 9.01.2014

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.06.2025 - 11:08