Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: rozbudowa skryptu przeszukującego
Forum PHP.pl > Forum > PHP
Cromwell
Dzięki pomocy osób na tym forum udało mi się stworzyć skrypt, którego zadaniem jest pobieranie linków z google, przeszukiwanie stron i wyciąganie z nich określonych danych.
Skrypt wygląda obecnie tak
  1. <form action="qq.php" method='get'>
  2. slowo: <input type='text' name='search' /><br />
  3. ile wynikow: <input type='text' name='ile' />
  4. <input type='submit' value='szukaj' />
  5. </form>
  6.  
  7. <?
  8. $take = $_GET['search']; // slowo pobrane z formularza
  9. $ile = $_GET['ile'];
  10. $it = explode(" ", $take);
  11. $search = implode("+", $it);
  12. $wzorzec = '/[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}/';
  13. if (!$search)
  14. echo 'podaj slowo';
  15. else {
  16. $link = file_get_contents("http://www.google.pl/search?q=$search&num=$ile");
  17. preg_match_all('|href="(.{0,100})" class=l|U', $link, $match, PREG_SET_ORDER);
  18.  
  19. foreach($match as $link)
  20. {
  21. $link2 = file_get_contents("$link[1]");
  22. preg_match_all($wzorzec, $link2, $wyniki);
  23. foreach ($wyniki as $mail)
  24. {
  25. echo "$mail[1]<br />";
  26. }
  27. preg_match_all('|href="(.{0,100})"|U', $link2, $match2, PREG_SET_ORDER);
  28.  
  29. foreach($match2 as $link2)
  30. {
  31. $link3 = file_get_contents("$link2[1]");
  32. preg_match_all($wzorzec, $link3, $wyniki2);
  33. foreach ($wyniki2 as $mail)
  34. {
  35. echo "$mail[1]<br />";
  36. }
  37. }
  38. }
  39. }
  40. ?>

Zdaję sobie sprawę, że z optymalizacją nie ma nic wspólnego, ale to nie ma znaczenia, bo będzie używany od czasu do czasu i przez jedną osobę.

Chcę w nim zmienić kilka rzeczy:
1. Obecnie skrypt po wejściu na strony znalezione w google, wchodzi raz jeszcze na linki na tych stronach i raz jeszcze. Chciałbym to zmienić, aby zamiast zagłębiać się w ten sposób, przeszukiwał dokładnie daną stronę w poszukiwaniu adresów mail. Czyli wchodzi na np. www.przyklad.pl, przeszukuje stronę główną i wszystkie podstrony (lub też tylko te podstrony, do których linki są na głównej) i wyciąga znalezione maile.

2. Zamiast wyświetlania wyników, chciałbym aby maile zapisywał do pliku. Podejrzewam, że ze stworzeniem pliku i zapisem tam wyników nie byłoby problemów, jednak czasem znajduje na kilku stronach (albo na jednej w kilku miejscach) ten sam adres mail. Chciałbym uniknąć w zapisie w pliku powtórzeń maili.

3. Podczas wyszukiwania wchodzi na wszystkie strony. Chciałbym uniknąć wchodzenia przez skrypt na takie linki, które prowadzą do nikąd (czyli np odnoszą się do plików styli). Powoduje to dużą ilość wyświetlanych błędów typu
Cytat
Warning: file_get_contents(story.cgi?wyb=7&next=2&chapter=1) [function.file-get-contents]: failed to open stream: No such file or directory in /home/radiomb/domains/radiomb.pl/public_html/qq.php on line 31

Próbowałem przed file_get_contents dodać @, jednak sprawiło to tylko tyle, że nie uzyskiwałem żadnych informacji. Ani błędów, ani maili.
wry
zmien wzorzec poszukiwania adresow z tego co masz na

'|<a.*href="([^"]+)"|U'

w ten sposb wybierzesz zawartosc atrybutu href ale tylko znacznikow a, ten znacznik nei zadziala jesli ktos zapisze link miedzy apostrofami jak tu <a href='index.html'> badz nie uzyje "" przy href <a href=index.html>
curl jest szybsze niz file_get_contents
zeby zapisac do pliku adresy dopisuj je do tablicy i na koncu zapisz, p dordze przed dodaniem adesu mozesz uzyc funkcji in_array zeby sprawdzic czy juz taki adres masz
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.