Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sczytywanie danych z googla
Forum PHP.pl > Forum > PHP
pawelk3k
Witam,
Robię właśnie program który sczytuje pierwszą stronę z googla (tuż po wpisaniu interesującego nas hasła). Kod wygląda tak:

  1. <?php
  2. $fraza="komputer";
  3. $url="http://www.google.pl/search?hl=pl&q=$fraza&btnG=Szukaj+w+Google&lr=";
  4. $tekst = file_get_contents($url);
  5. preg_match_all('@<h3 class=r><a href="(.*)" class=l>(.*)</a></h3>(.*)<div class="s">(.*)<br><cite>@iU', $tekst, $wynik);
  6. print_r($wynik);
  7. ?>

(Program zaczerpnięty z http://peb.pl/tworzenie-stron/353712-curl-na-google-2.html).


To co program wyświetla to :

Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) [3] => Array ( ) [4] => Array ( ) )

Podejrzewam ze błąd jest gdzieś w funkcji preg_match_all. Zależy mi tylko na linku z strony. Lecz niestety nie wiem gdzie sad.gif proszę o pomoc.
tehaha
łatwiej i wydajniej będzie użyć DOMDocument

tu masz gotowca: http://www.phpro.org/examples/Get-Links-With-DOM.html
pawelk3k
Co prawda to co podałeś tehaha działa, lecz zwraca bardzo dużo śmieci. Nie jestem zadowolony z efektu. Chciałbym by zwrócone wiadomości były bez tych wszystkich śmieci.
tehaha
Wiesz przede wszystkim nie napisałeś co dokładnie potrzebujesz wyciągnąć i w jakiej formie, myślałem, że chodzi Ci o pobranie linków z wynikami i po małych przeróbkach przykłady miałbyś taki efekt. Po drugie podany przykład to tylko przykład rozwiązania opartego o DOMDocument, w manualu masz całą specyfikację tej klasy i więc możesz to sobie dowolnie dostosować -> http://php.net/manual/en/class.domdocument.php, bo w wielu przypadkach takie manipulacje łatwiej i wydajniej jest zrobić bez wyrażeń regularnych.
pawelk3k
przyjrzałem się DOMDocument pomysł moze być dobry, to co chciałbym uzyskać to:

www.ceneo.pl/Laptopy
www.sferis.pl/
pl.wikipedia.org/wiki/Laptop
www.x-kom.pl/c/159-notebooki-netbooki-laptopy.html

czyli linki z googla poukładane w kolejności. Myśle ze pomysł z DOMdocment jest dobry. Tylko muszę zastosować funkcje która wyczyści mi wyszukany tekst z śmieci. Obecny tekst który dostaje to:

  1. <a href="http://www.google.pl/webhp?hl=pl&tab=ww" target="_blank">http://www.google.pl/webhp?hl=pl&tab=ww</a> -
  2. <a href="http://www.google.pl/search?hl=pl&q=laptop&lr=&um=1&ie=UTF-8&tbm=isch&source=og&sa=N&tab=wi" target="_blank">http://www.google.pl/search?hl=pl&q=la...sa=N&tab=wi</a> -
  3. <a href="http://www.google.pl/search?hl=pl&q=laptop&lr=&um=1&ie=UTF-8&tbo=u&tbm=vid&source=og&sa=N&tab=wv" target="_blank">http://www.google.pl/search?hl=pl&q=la...sa=N&tab=wv</a> -
  4. <a href="http://maps.google.pl/maps?hl=pl&q=laptop&lr=&um=1&ie=UTF-8&sa=N&tab=wl" target="_blank">http://maps.google.pl/maps?hl=pl&q=lap...sa=N&tab=wl</a> -
  5. <a href="http://news.google.pl/nwshp?hl=pl&tab=wn" target="_blank">http://news.google.pl/nwshp?hl=pl&tab=wn</a> -
  6. <a href="http://translate.google.pl/?hl=pl&q=laptop&lr=&um=1&ie=UTF-8&sa=N&tab=wT" target="_blank">http://translate.google.pl/?hl=pl&q=la...sa=N&tab=wT</a> -
  7. <a href="https://mail.google.com/mail/?tab=wm" target="_blank">https://mail.google.com/mail/?tab=wm</a> -
  8. <a href="http://www.google.pl/intl/pl/options/" target="_blank">http://www.google.pl/intl/pl/options/</a> - Jeszcze więcej ť
  9. <a href="http://www.google.pl/search?hl=pl&q=laptop&lr=&um=1&ie=UTF-8&tbo=u&tbm=bks&source=og&sa=N&tab=wp" target="_blank">http://www.google.pl/search?hl=pl&q=la...sa=N&tab=wp</a> - Książki
  10. <a href="http://scholar.google.pl/scholar?hl=pl&q=laptop&lr=&um=1&ie=UTF-8&sa=N&tab=ws" target="_blank">http://scholar.google.pl/scholar?hl=pl&amp...sa=N&tab=ws</a> - Scholar
  11. <a href="http://www.google.pl/search?hl=pl&q=laptop&lr=&um=1&ie=UTF-8&tbo=u&tbm=blg&source=og&sa=N&tab=wb" target="_blank">http://www.google.pl/search?hl=pl&q=la...sa=N&tab=wb</a> - Blogi
  12. <a href="http://www.youtube.com/results?hl=pl&q=laptop&lr=&um=1&ie=UTF-8&sa=N&tab=w1&gl=PL" target="_blank">http://www.youtube.com/results?hl=pl&q...ab=w1&gl=PL</a> - YouTube
  13. <a href="https://www.google.com/calendar?tab=wc" target="_blank">https://www.google.com/calendar?tab=wc</a> - Kalendarz
  14. <a href="http://picasaweb.google.pl/lh/view?hl=pl&q=laptop&lr=&um=1&ie=UTF-8&sa=N&tab=wq" target="_blank">http://picasaweb.google.pl/lh/view?hl=pl&a...sa=N&tab=wq</a> - Zdjęcia
  15. <a href="https://docs.google.com/?tab=wo" target="_blank">https://docs.google.com/?tab=wo</a> - Dokumenty
  16. <a href="https://sites.google.com/?tab=w3" target="_blank">https://sites.google.com/?tab=w3</a> - Witryny
  17. <a href="https://groups.google.pl/groups?hl=pl&q=laptop&lr=&um=1&ie=UTF-8&sa=N&tab=wg" target="_blank">https://groups.google.pl/groups?hl=pl&q...sa=N&tab=wg</a> - Grupy dyskusyjne
  18. <a href="http://www.google.pl/reader/view/?hl=pl&tab=wy" target="_blank">http://www.google.pl/reader/view/?hl=pl&tab=wy</a> - Czytnik
  19. <a href="https://accounts.google.com/ServiceLogin?hl=pl&continue=http://www.google.pl/search%3Fhl%3Dpl%26q%3Dlaptop%26btnG%3DSzukaj%2Bw%2BGoogle%26lr%3D" target="_blank">https://accounts.google.com/ServiceLogin?hl...BGoogle%26lr%3D</a> -
  20. <a href="http://www.google.pl/preferences?hl=pl" target="_blank">http://www.google.pl/preferences?hl=pl</a> -
  21. /preferences?hl=pl - Ustawienia wyszukiwania
  22. <a href="http://www.google.pl/history/optout?hl=pl" target="_blank">http://www.google.pl/history/optout?hl=pl</a> - Historia online
  23. /webhp?hl=pl -
  24. /advanced_search?q=laptop&hl=pl&lr=&ie=UTF-8&prmd=ivnsr - Szukanie zaawansowane
  25. /search?q=laptop&hl=pl&lr=&ie=UTF-8&prmd=ivnsr&source=lnms&tbm=isch&ei=ubGqT_P5HIf3sgaglZHRBA&sa=X&oi=mode_link&ct=mode&cd=2&ved=0CAYQ_AUoAQ -
  26. /search?q=laptop&hl=pl&lr=&ie=UTF-8&prmd=ivnsr&source=lnms&tbm=vid&ei=ubGqT_P5HIf3sgaglZHRBA&sa=X&oi=mode_link&ct=mode&cd=3&ved=0CAcQ_AUoAg -
  27. /search?q=laptop&hl=pl&lr=&ie=UTF-8&prmd=ivnsr&source=lnms&tbm=nws&ei=ubGqT_P5HIf3sgaglZHRBA&sa=X&oi=mode_link&ct=mode&cd=4&ved=0CAgQ_AUoAw -
  28. /search?hl=pl&q=laptop&lr=&sa=X&prmdo=1 -
  29. /search?q=laptop&hl=pl&lr=lang_pl&ie=UTF-8&prmd=ivnsr&source=lnt&tbs=lr:lang_1pl&sa=X&ei=ubGqT_P5HIf3sgaglZHRBA&ved=0CA8QpwUoAQ - Tylko język polski
  30. /search?q=laptop&hl=pl&lr=&ie=UTF-8&prmd=ivnsr&source=lnt&tbs=qdr:h&sa=X&ei=ubGqT_P5HIf3sgaglZHRBA&ved=0CBIQpwUoAQ - Ostatnia godzina
  31. /search?q=laptop&hl=pl&lr=&ie=UTF-8&prmd=ivnsr&source=lnt&tbs=qdr:d&sa=X&ei=ubGqT_P5HIf3sgaglZHRBA&ved=0CBQQpwUoAg - Ostatnie 24 godziny
  32. /search?q=laptop&hl=pl&lr=&ie=UTF-8&prmd=ivnsr&source=lnt&tbs=qdr:d2&sa=X&ei=ubGqT_P5HIf3sgaglZHRBA&ved=0CBYQpwUoAw - Ostatnie 2 dni
  33. /search?q=laptop&hl=pl&lr=&ie=UTF-8&prmd=ivnsr&source=lnt&tbs=qdr:w&sa=X&ei=ubGqT_P5HIf3sgaglZHRBA&ved=0CBgQpwUoBA - Ostatni tydzień
  34. /search?q=laptop&hl=pl&lr=&ie=UTF-8&prmd=ivnsr&source=lnt&tbs=qdr:m&sa=X&ei=ubGqT_P5HIf3sgaglZHRBA&ved=0CBoQpwUoBQ - Ostatni miesiąc
  35. /search?q=laptop&hl=pl&lr=&ie=UTF-8&prmd=ivnsr&source=lnt&tbs=qdr:y&sa=X&ei=ubGqT_P5HIf3sgaglZHRBA&ved=0CBwQpwUoBg - Ostatni rok
  36. /search?q=laptop&hl=pl&lr=&sa=G&ie=UTF-8&prmd=ivnsr&tbo=1 - Więcej narzędzi
  37. /aclk?sa=l&ai=CPhOQubGqT6urHsSvtAb637XfCsyS25MC_PXm2yex1OkFCAAQASgDUNDYjuj7_____wFg6YzShfQaoAH
    mpJn-A8gBAakCTg0H3x55lD6qBBxP0Gpr-C_QXqgKnWgZFN7m6fcj6jzaDMzpSEsz&sig=AOD64_1dZAXp2rpFUDen8QYlz036_hCohQ&adurl=http://www.ceneo.pl/Laptopy%3Fse%3DfKblsJWf48VHhn7hPjSHbD_H4ZjbMHZt - Laptop
  38. /aclk?sa=l&ai=CX8E9ubGqT6urHsSvtAb637XfCoe9lvMBl5L9pjix1OkFCAAQAigDUIK1rs_-_____wFg6YzShfQaoAG5s9j8A8gBAakC7xZowZGQlD6qBBxP0DoA6S_TXqgKnWgZFO2wyMgj6jzaDMzp
    SEsz&sig=AOD64_2_KGfWlIdy7uWq1_n9VprhNcOQXQ&adurl=http://www.allegro.pl - Laptop
  39. /aclk?sa=l&ai=CYUyoubGqT6urHsSvtAb637XfCoe9lvMBl5L9pjix1OkFCAAQAigDUIi46vgHYOmM0oX0GqABubPY_AP
    IAQGpAu8WaMGRkJQ-qgQcT9A6AOkv016oCp1oGRTtsMjII-o82gzM6UhLM_oFCQgDEL_Tl0EYAQ&ctype=4&sig=AOD64_1D3Gt-vzUBb613Wa3eR_ZI12YGUg&adurl=http://allegro.pl/tablety-89253 - Tablety
  40. /aclk?sa=l&ai=CKg8eubGqT6urHsSvtAb637XfCoe9lvMBl5L9pjix1OkFCAAQAigDUMGV-PL9_____wFg6YzShfQaoAG5s9j8A8gBAakC7xZowZGQlD6qBBxP0DoA6S_TXqgKnWgZFO2wyMgj6jzaD
    MzpSEsz-gUJCAMQv9OXQRgC&ctype=4&sig=AOD64_3s1rovAPKRlrVclmmjGDuuU-SFpg&adurl=http://allegro.pl/laptopy-491 - Laptopy
  41. /aclk?sa=l&


Ubrałem w php by nie śmiecić linkami. Jakiś pomysł ? może getElementsByTagName ?



Jednak bardziej skłonny jestem temu projektowi:

  1.  
  2. echo'<pre>';
  3. $fraza="lol";
  4. $url="http://www.google.pl/search?hl=pl&q=$fraza&btnG=Szukaj+w+Google&lr=";
  5. $tekst = file_get_contents($url);
  6. preg_match_all('@<h3 class=r><a href="(.*)" class=l>(.*)</a></h3>(.*)<div class="s">(.*)<br><cite>@iU', $tekst, $wynik);
  7. print_r($wynik);
  8. echo'</pre>';


Tylko jest tu mały błąd w funkcji preg_match_all niestety nie wiem jaki. Próbowałem zmieniać (.*) na inne znaki co również nic nie dawało. Nie wiem również co ma oznaczać @ na początku komendy. Oto zdjęcie elementu którego poszukuje http://postimage.org/image/ystr4omif/
tehaha
jak trochę poszukasz w Google to znajdziesz wyrażenie regularne, które pobiera te wyniki, aczkolwiek zauważysz też, że sposób z wyrażeniami ma dość sporą wadę tutaj - jeżeli Google wprowadzi jakąś zmianę w kodzie to Twój sposób przestanie działać.

Zakładam, że to co Ciebie interesuje to odnośniki znajdujące się wewnątrz <h3>, jak widać kilka prostych linijek w oparciu o DomDocument załatwia sprawę:

  1. $fraza = "komputer";
  2. $url = "http://www.google.pl/search?hl=pl&q=$fraza&btnG=Szukaj+w+Google&lr=";
  3.  
  4. $dom = new domDocument;
  5. @$dom->loadHTML(file_get_contents($url));
  6.  
  7. $resultsDiv = $dom->getElementById('ires');
  8. $links = $resultsDiv->getElementsByTagName('a');
  9.  
  10. foreach ($links as $tag)
  11. {
  12. if(strpos($tag->getNodePath(), 'h3')) $ret[$tag->getAttribute('href')] = $tag->childNodes->item(0)->nodeValue;
  13. }
  14. echo '<pre>';
  15. print_r($ret);
  16. echo '</pre>';
pawelk3k
Oczywiście to co podałeś to działa lecz zwraca pełen link:

[/url?q=http://www.allegro.pl/item1095973044_t_torba_15_4_15_6_16_laptop_pokrowiec.html&sa=U&ei=92OtT76VG-XT4QSeuPifDA&ved=0CBIQFjAA&usg=AFQjCNGoxC2WeJwBl9IElbaD93LWYlw2RA] => T TORBA 15,4 15,6" 16

Chociaż link zaczyna się od www a kończy przed znakami "&sa=U" chciałbym dostać gotowy link w tym wypatku:

www.allegro.pl/item1095973044_t_torba_15_4_15_6_16_laptop_pokrowiec.htm

myślę o ponownym zastosowaniu getElementsByTagName.

od razu mówię ze funkcja strstr nie działa sad.gif wyrzuca mi błąd

strstr() expects parameter 1 to be string, array given

Myśle ze to po prostu zmienna nie jest typu string (nie pytajcie mnie jak to możliwe). Więc zastosowałem pewien trick:

  1. $sResult2 = (string) $iVar;


gdy tak robię dostaje w odpowiedzi pustą wiadomość.

dokładny kod wygląda tak:

  1. $url = "http://www.google.pl/search?hl=pl&source=hp&q=site:$Liczba1+++%22$Liczba2";
  2.  
  3. $dom = new domDocument;
  4. @$dom->loadHTML(file_get_contents($url));
  5.  
  6. $resultsDiv = $dom->getElementById('ires');
  7. $links = $resultsDiv->getElementsByTagName('a');
  8.  
  9. foreach ($links as $tag)
  10. {
  11. if(strpos($tag->getNodePath(), 'h3')) $ret[$tag->getAttribute('href')] = $tag->childNodes->item(0)->nodeValue;
  12. }
  13. //$wys = $ret->getElementsByTagName('[/url?q=http:');
  14. echo '<pre>';
  15.  
  16.  
  17.  
  18. $nret = (string) $ret;
  19. $nowy = strstr($nret, "www");
  20. print_r($nowy);
  21. echo '</pre>';

Nie mam pojęcia dlaczego program tak reaguje, próbowałem również przypisywać $ret innej zmienna ale zawsze jest tak samo proszę o pomoc.
tehaha
@pawelk3k Forum to jest miejsce gdzie się ludziom pomaga, a nie odwala za nich całą robotę. To co teraz wypisałeś pokazuje, że nie zapoznałeś się z podstawami php. A bez podstaw to praktycznie gotowy kod nic Ci nie daje i nawet gdybym Ci napisał dokładnie co trzeba przerobić to i tak byś nie wiedział jak to zrobić. Swoją drogą to aż godne podziwu ile błędów można zrobić doklejając zaledwie 2 linijki.

Tu masz gotowy skrypt, który pobiera wyniki z Google za pomocą googleApi: http://thetechnofreak.com/technofreak/goog...ch-results-php/, jeżeli dla zmiennej $pages przypiszesz wartość 1, a dla zmiennej $query szukaną frazę to otrzymasz tablicę(poczytaj o tym co to są tablice i jak je używać) z pierwszą stroną wyników wyszukiwania dla podanej frazy. Ale niestety bez podstaw i ten skrypt może okazać się mało użyteczny, musisz zapoznać się z takimi pojeciami jak: typy zmiennych, tablica, operacje na tablicy, pętle, funkcje, curl. Pamiętaj też, że każdą funkcję php możesz sprawdzić w manualu i tak też powinieneś zrobić - linijka po linijce dowiedzieć się jak skrypt działa. Masz tam dokładny opis tego co robi dana funkcja, jakie przyjmuje parametry, co zwraca, przykłady użycia oraz często wiele cennych informacji w kometarzach.

Manual: http://www.php.net/
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.