Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]przeszukiwanie strony
Cromwell
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

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


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?

Ten post edytował Cromwell 21.09.2009, 17:45:18
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Wicepsik
post
Post #2





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

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


Wyrażenia regularne
Go to the top of the page
+Quote Post
Suh
post
Post #3





Grupa: Zarejestrowani
Postów: 112
Pomógł: 27
Dołączył: 24.08.2007
Skąd: Tarnów

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


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
Go to the top of the page
+Quote Post
Cromwell
post
Post #4





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

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


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..
Go to the top of the page
+Quote Post
Suh
post
Post #5





Grupa: Zarejestrowani
Postów: 112
Pomógł: 27
Dołączył: 24.08.2007
Skąd: Tarnów

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


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);

Ten post edytował Suh 22.09.2009, 22:18:26
Go to the top of the page
+Quote Post
Cromwell
post
Post #6





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

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


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) { }

Ten post edytował Cromwell 23.09.2009, 10:00:15
Go to the top of the page
+Quote Post
Suh
post
Post #7





Grupa: Zarejestrowani
Postów: 112
Pomógł: 27
Dołączył: 24.08.2007
Skąd: Tarnów

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


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ł.
Go to the top of the page
+Quote Post
Cromwell
post
Post #8





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 1.09.2009

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


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..

Ten post edytował Cromwell 23.09.2009, 20:58:48
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: 3.10.2025 - 22:33