![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 1 Dołączył: 26.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie,
piszę ponieważ męczę się już 4h i nie daję rady. Otóż problem wygląda tak: pobieram za pomocą curla stronę i mam tam kilka elementów, które chciałbym wyświetlić. Przykładowa tabela z wynikami na jednej ze stron wygląda tak: Kod <div class=\"staty\"> <h1> <table style=\"text-align: left; border-spacing: 10px 10px;\"> <tr> <td><b>Tekst:</b></td><td><u>30,650</u></td> </tr> <tr> <td><b>Tekst</b></td><td><u>26,277.47</u></td> </tr> <tr> <td><b>Tekst:</b></td><td><u>23.1625</u></td> </tr> <tr> <td><b>Tekst:</b></td><td><u>5510</u></td> </tr> <tr> <td><b>Tekst:</b></td><td><u>0</u></td> </tr> <tr> <td><b>Tekst:</b></td><td><u>21</u></td> </tr> <tr> <td><b>Tekst:</b></td><td><u>52</u></td> </tr> <tr> <td><b>Tekst</b></td><td><u>0</u></td> </tr> </table> </h1> </div> Jak użyć funkcji preg_match_all, by najpierw znalazło mi tę konkretną tabelę (div class="staty"), a potem wszystkie ciągli liczb (ewentualnie zawartość tagów <u>). Oraz co dopisać, żeby zwróciło mi wszystkie te cyfry po kolei. Wiem, że dla zorientowanego programisty to 30 sekund pisania kodu, dlatego mam nadzieję, że nie proszę o zbyt wiele, zwłaszcza, że chcę się nauczyć robić to sam (na innych stronach, z których chcę pobierać dane liczbowe będę musiał pisać nowe funkcje, ale chciałbym mieć jakiś szablonik). Pozdrawiam! |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%) ![]() ![]() |
Pokaż jaki kod stworzyłeś przez 4h
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 1 Dołączył: 26.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Pokaż jaki kod stworzyłeś przez 4h Szczerze, to nie ma co pokazywać bo gugluje i znajduję różne gotowce, które próbuję dostosować to swoich potrzeb, ale co chwila jakieś błędy itd. Tzn. preg_mach zwykłe do jakichś konkretów dochodziłem, ale z all już słabo. Oto zaktualizowany kod (chyba wersja w której byłem najbliżej zamierzonego efektu). Dodaję od razu z curlem: Kod $curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, "http://imperiumreklamy.com/pages/index.php"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $html = curl_exec ($curl); curl_close ($curl); // pobieram zawartość diva class="staty" z powyższej strony preg_match("'<div class=\"staty\">(.*?)</div>'si", $html, $match); echo $match[1]; preg_match_all("/([0-9]+(\,[0-9]+)?)/", $match[1], $liczby); // i tutaj jest problem -> wartości wyświetlają się, ale zamiast jeden raz, powtarzają się trzy razy foreach ($liczby as $val) { echo "Uczestników w programie: " . $val[3] . "<br />"; echo "Wypłaty i wydatki: " . $val[4] . "<br />"; } Ten post edytował sll 25.03.2010, 21:33:21 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 389 Pomógł: 141 Dołączył: 11.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Tak ciężko sobie sprawdzić co siedzi w $liczby?
Kod preg_match_all("/([0-9]+(\,[0-9]+)?)/", $match[1], $liczby); print_r($liczby); //a później echo $liczby[0][1], $liczby[0][2] itd Najlepiej to zrób tak i będziesz miał i nazwy i liczby w tablicy. Dostosuj (.*) do liter czy tam liczb, żeby problemów nie było. Kod preg_match_all("#<b>(.*)</b>.+<u>(.*)</u>#", $match[1], $liczby);
print_r($liczby); |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 1 Dołączył: 26.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, naprowadziłeś mnie trochę i udało mi się osiągnąć efekt, jaki zamierzałem. Zamieszczam poniżej gdyby ktoś wyguglował ten temat.
Kod $curl = curl_init(); curl_setopt ($curl, CURLOPT_URL, "http://imperiumreklamy.com/pages/index.php"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $html = curl_exec ($curl); curl_close ($curl); // pobieram zawartość diva class="staty" z powyższej strony preg_match("'<div class=\"staty\">(.*?)</div>'si", $html, $match); echo $match[1]; preg_match_all("/([0-9]+(\,[0-9]+)?)/", $match[1], $liczby); //Wyrzuć całą zawartość tablicy //print_r($liczby); //wartości z przecinkami //echo $liczby[1][3] . "<br />"; //echo $liczby[1][4] . "<br />"; //pozbądź się przecinków $wynik = str_replace(",", " ", $liczby[1][3]); $wynikk = str_replace(",", " ", $liczby[1][4]); echo $wynik . "<br />"; echo $wynikk . "<br />"; Na końcu jeszcze usunąłem przecinki. Wolę wariant z liczbami niż z wycięciem zawartości <b> i <u> ponieważ na innych stronach, z których będę pobierał dane, bardzo możliwe, że nie będzie żadnych tagów. Dziękuję jeszcze raz za pomoc ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 16:42 |