Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] preg_match_all jak obrobić wyniki
amii
post 26.07.2010, 13:41:15
Post #1





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Mam taką funkcję, która korzystając z wyszukiwarki wydobywa adresy URL, niestety nie wiem jak się dostać do wyników zwróconych z print_r($matches) tam wyświetla się 100 rekordów

  1. function href() {
  2. $pusta = array();
  3. $licznik = 0;
  4. for ($a=0; $a<101; $a+=10) {
  5. $url1 = 'http://blogsearch.google.com/blogsearch?hl=en&ie=UTF-8&q=przykladowe+zapytanie&btnG=Search+Blogsi&sa=N&start='.$a; //robimy petelke dla pierwszych 100 stron
  6. $zawartosc = file_get_contents($url1);
  7. $pattern = '/<font size=-1><a class=f1 href="(.*)" id="pb-[0-9]"/i';
  8. $ile = preg_match_all($pattern, $zawartosc, $matches); //w $ile przechowujemy ilosc dopasowan
  9.  
  10.  
  11.  
  12. $pusta[$licznik] = substr($matches[0][0], (strpos($matches[0][0], 'href="')+6), (strpos($matches[0][0], 'id="pb')-34)); //wydobywamy wlasciwy adres url
  13. $licznik++;
  14. }
  15.  
  16.  
  17. for ($k=0; $k<count($pusta); $k++) echo 'Dopasowanie : ' . $pusta[$k] . '<br>'; /wyswietla tylko 10 rekordow pierwsze pobrane z kazdej strony
  18. }


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
everth
post 26.07.2010, 14:10:28
Post #2





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Może coś takiego, nie daję gwarancji że zadziała:
  1. function href() {
  2. $result = array();
  3. $doc = new DOMDocument();
  4. $xpath = new DOMXPath($doc);
  5.  
  6. $url1 = 'http://blogsearch.google.com/blogsearch?hl=en&ie=UTF-8&q=przykladowe+zapytanie&btnG=Search+Blogsi&sa=N&start=';
  7.  
  8. for ($a=0; $a<101; $a+=10) { //dla mnie to petla dla 10 stron, ale co tam ;)
  9. $url1 .= $a; //robimy petelke dla pierwszych 100 stron
  10. $doc->loadHTMLFile($url1);
  11. $links = $xpath->query("//a[@class='f1' and starts-with(@id, 'pb-')]"); //znajdź elementy a o klasie f1 i id zaczynającym się od pb-
  12.  
  13. $limes = (count($links)<10) ? count($links):10; //ustalamy granice dla 10 rekordow lub mniej (gdy linkow jest mniej
  14.  
  15. for ($k=0; $k<$limes; $k++) {
  16. $href = $links->item($k)->getAttribute('href'); // nasz link
  17. $result[] = $href;
  18. echo 'Dopasowanie : ' . $href . '<br>'; //wyswietla tylko 10 rekordow pierwsze pobrane z kazdej strony
  19. }
  20.  
  21. }
  22. return $result;
  23. }


Ten post edytował everth 26.07.2010, 14:12:51


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
amii
post 27.07.2010, 08:40:44
Post #3





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Trochę pozmieniałem. Ale nadal wyskakuje coś takiego i nic nie zwraca -> http://serwisosmoz.eu/index1.php

  1. function href() {
  2. $result = array();
  3. $doc = new DOMDocument();
  4. $xpath = new DOMXPath($doc);
  5.  
  6.  
  7. for ($a=0; $a<101; $a+=10) { //dla mnie to petla dla 10 stron, ale co tam ;)
  8.  
  9.  
  10. $url1 = 'http://blogsearch.google.com/blogsearch?hl=en&ie=UTF-8&q=przykladowe+zapytanie&btnG=Search+Blogsi&sa=N&start='.$a;
  11. echo 'url to : ' . $url1;
  12.  
  13. $doc->loadHTMLFile($url1);
  14. $links = $xpath->query("//a[@class='f1' and starts-with(@id, 'pb-')]"); //znajdź elementy a o klasie f1 i id zaczynającym się od pb-
  15.  
  16. $limes = (count($links)<10) ? count($links):10; //ustalamy granice dla 10 rekordow lub mniej (gdy linkow jest mniej
  17.  
  18. for ($k=0; $k<$limes; $k++) {
  19. $href = $links->item($k); // nasz link
  20. if ($href != null) $href->getAttribute('href'); //tu wczesniej wyskakiwał blad -> Call to a member function getAttribute() on a non-object
  21. $result[] = $href;
  22. echo 'Dopasowanie : ' . $href . '<br>'; //wyswietla tylko 10 rekordow pierwsze pobrane z kazdej strony
  23. }
  24.  
  25. }
  26. return $result;
  27. }


Ten post edytował amii 27.07.2010, 08:44:17


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
everth
post 27.07.2010, 13:22:12
Post #4





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Sprawdź co zwraca funkcja $doc->loadHTMLFile (np. za pomocą var_dump()). Możliwe że nie wolno jej otwierać zewnętrznych zasobów po URL.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
amii
post 27.07.2010, 13:38:16
Post #5





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Funkcja zwraca boolowski true więc niby ok. Wygląda na to, ze nie znajduje dopasowań.


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
everth
post 27.07.2010, 13:41:55
Post #6





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Czekaj, może xpath jest źle skonstruowany. Daj var_dump na '$links' oraz na 'count($links)'.

EDIT: Dodatkowo jeszcze sprawdź co jest pod $doc->documentElement, czasem xpath nie działa na złych HTML-ach

Ten post edytował everth 27.07.2010, 13:43:54


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
amii
post 27.07.2010, 13:53:12
Post #7





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Dałem tak:

  1. var_dump($links);
  2. $ilosc = count($links);
  3. echo 'separator <br>';
  4. var_dump($ilosc);
  5. echo 'separator <br>';
  6. $wyswietl = $doc->documentElement;
  7. var_dump($wyswietl);
  8. echo '<br><br>';


Wyskoczyło to -> http://serwisosmoz.eu/index1.php


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
everth
post 28.07.2010, 11:05:38
Post #8





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


To powinno ci zadziałać (u mnie działa biggrin.gif). Zwraca tablicę z adresami. Sama funkcja wykonuje się dosyć wolno (bo odpytuje po adresach). Aha, zainteresuj się dodatkiem XDebug do PHPa
  1. function href() {
  2. $result = array();
  3. $doc = new DOMDocument();
  4.  
  5. for ($a=0; $a<101; $a+=10) { //dla mnie to petla dla 10 stron, ale co tam ;)
  6. $url1 = 'http://blogsearch.google.com/blogsearch?hl=en&ie=UTF-8&q=przykladowe+zapytanie&btnG=Search+Blogsi&sa=N&start='.$a;
  7.  
  8. @$doc->loadHTMLFile($url1);
  9. $links = simplexml_import_dom($doc)->xpath("//a[@class='f1' and starts-with(@id, 'pb-')]"); //znajdź elementy a o klasie f1 i id zaczynającym się od pb
  10.  
  11. $limes = (count($links)<10) ? count($links):10; //ustalamy granice dla 10 rekordow lub mniej (gdy linkow jest mniej
  12. for ($k=0; $k<$limes; $k++) {
  13. $href = (string) $links[$k]['href']; // nasz link
  14. if ($href != null) $result[] = $href; // dodajemy jeśli link istnieje
  15. }
  16. }
  17. return $result;
  18. }
  19.  
  20. var_dump(href()); // wyświetla wyniki


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
amii
post 28.07.2010, 12:19:51
Post #9





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


everth wielkie dzięki rzeczywiście działa smile.gif Poczytam sobie trochę o modelu DOM i debugerze.


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
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: 25.07.2025 - 10:42