Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]przeszukiwanie strony
Forum PHP.pl > Forum > Przedszkole
Cromwell
Potrzebuję dwóch rzeczy.

Pierwsza to funkcje, dzięki którym będę mógł znaleźć określone elementy na stronie, znajdujące się w odpowiednich blokach.
Na przykład w kodzie źródłowym większej strony mamy kilka razy powtórzone
Kod
<h3>cos tam</h3>
<a href=link>cos tam</a>

Zależy mi na wyłuskaniu tych linków, przy czym tylko tych, które są po znaczniku nagłówka (a sam nagłówek może się pojawić kilka razy na stronie i zawsze pod nim są linki).
Próbowałem znaleźć coś w manualu, szukałem w funkcjach preg_*, jednak na nic nie trafiłem.


Druga rzecz - chcę, aby po wyłuskaniu danego linku, skrypt wszedł na stronę w nim podaną i znalazł tam kolejne dane. Myślałem nad tym, aby pobierać dane strony i zapisywać je w tablicy, jednak nie wydaje mi się to ładnym rozwiązaniem.
Można prosić o naprowadzenie?
Wicepsik
Wyrażenia regularne
Suh
Ad. 1. preg_match + wyrażenia regularne (jak napisał kolega wyżej).
Ad. 2. file_get_contents i jako argument podajesz stronę, której zawartość chcesz pobrać, a dalej to tak jak w ad. 1.

Pozdrawiam
Cromwell
Dobrze, teraz mam taki kod
  1. <form action="qq.php" method='get'>
  2. <input type='text' name='search' />
  3. <input type='submit' value='szukaj' />
  4. </form>
  5.  
  6. <?
  7. $search = $_GET['search']; // slowo pobrane z formularz
  8.  
  9. if (!$search)
  10. echo 'podaj slowo';
  11. else {
  12. $link = file_get_contents("http://www.google.pl/search?q=$search");
  13. preg_match('/href="(.*)" class/', $link, $match);
  14. echo "$match";
  15. }
  16. ?>


Jednak zwraca mi pustą tablicę, zupełnie bez wyników. Podejrzewam, że coś źle ustawiłem z wyrażeniami regularnymi, jednak nie wiem co..
Suh
Spróbuj takie coś.
Zamień swój preg_match na to :
  1. preg_match_all('|href="(.{0,100})" class=l|U', $link, $match, PREG_SET_ORDER);


PS. Dałem tam ograniczenie do 100 znaków. U mnie wszystkie poprawne linki zbierało, a bez tego ograniczenia dużo syfu było.

Edit.
Oczywiście wyświetl sobie wynik var_dump($match);
Cromwell
guzik. Nadal nie działa, wyświetla pustą tablicę. Zmieniłem tak jak powiedziałeś na
  1. else {
  2. $link = file_get_contents("http://www.google.pl/search?q=$search");
  3. preg_match_all('|href="(.{0,100})" class=l|U', $link, $match, PREG_SET_ORDER);
  4. var_dump($match);
  5. }

jednak zamiast tablicy z linkami dostaję tylko array(0) { }
Suh
No to ciekawe, bo skopiowałem to co powyżej wkleiłeś i u mnie działa.
Spróbuj dać hasło do wyszukiwania na sztywno, zobacz co się wyświetli jak dasz echo $link;
Popróbuj - gdyby mi to nie działało to bym Ci nie odpisał.
Cromwell
Sam nie wiem. Wydaje się, że wszystko w porządku. Kod aktualnie wygląda tak
  1. <form action="qq.php" method='get'>
  2. <input type='text' name='search' />
  3. <input type='submit' value='szukaj' />
  4. </form>
  5.  
  6. <?
  7. $search = $_GET['search']; // slowo pobrane z formularza
  8.  
  9. if (!$search)
  10. echo 'podaj slowo';
  11. else {
  12. $link = file_get_contents("http://www.google.pl/search?q=$search");
  13. preg_match_all('|href="(.{0,100})" class=l|U', $link, $match, PREG_SET_ORDER);
  14. var_dump($match);
  15. }
  16. ?>

I cały czas dostaję array(0).
Sprawdzałem na dwóch serwerach, efekt ten sam.
Co ciekawe - jeśli po linijce ze zmienną $link dam echo "$link", to dostanę w odpowiedzi stronę 403 google.
Jeśli zamiast linku google podam jakąś inną stronę, wtedy listuje mi linki.
Dodatkowo, jeśli w firefoxie wpiszę w formularzu np 'test', to zamiast przeładowania się strony, przenosi mnie na stronę hxxp://today-newday.cn/in.cgi?6&parameter=newday . Która jest blokowana przez google. W operze nic takiego się nie dzieje, przeładowuje normalnie.


Okazało się, że serwer jest prawdopodobnie banowany w google i dlatego nie ma wyników.
Prawdopodobnie, gdyby nie to, znacznie szybciej doszedłbym do rozwiązania problemu. Cóż, bywa..
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.