Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Preg_match wyrażenia regularne, Podczas pobierania strony curlem
sll
post
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!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Wicepsik
post
Post #2





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Pokaż jaki kod stworzyłeś przez 4h
Go to the top of the page
+Quote Post
sll
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 1
Dołączył: 26.01.2010

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


Cytat(Wicepsik @ 25.03.2010, 19:23:29 ) *
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
Go to the top of the page
+Quote Post
athei
post
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);
Go to the top of the page
+Quote Post
sll
post
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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 20:01