[PHP] Pobieranie wszystkich linków ze strony www

Zbiór ciekawych kodów źródłowych, skryptów i gotowców.
Regulamin forum
-Staraj się poprzedzać nazwę tematu prefiksem z nazwą języka programowania np. [Python] nazwa tematu.
-Wklejaj źródła w znaczniku

Kod: Zaznacz cały

[/b].
-Staraj się w skrócie opisać do czego dane źródło służy.
[b]-Zawsze podaj stronę domową autora (jeśli znasz te informacje)[/b]. Szanujemy cudzą prace!
Awatar użytkownika
F3nix
Posty: 328
Rejestracja: 28 kwie 2015, 20:51

[PHP] Pobieranie wszystkich linków ze strony www

Post autor: F3nix » 07 sty 2016, 01:08

Napisałem dawno temu prostą funkcje w języku PHP pobierającą wszystkie odnośniki z podanej jako parametr strony www. Funkcja zwraca tylko unikalne odnośniki, a więc usuwa te powtarzające się. Może się komuś przyda kto chce napisać jakiś prosty crawlery lub skaner podatności WWW. Funkcja wykorzystuje wyrażenia regularne, file_get_contents (można zastopić cURL jeśli na serwerze jest dostępny). Jako parametr przyjmuje adres URL strony z której chcemy pobrać linki. Wartością zwracaną jest tablica do dalszej obróbki z odnalezionymi linkami.

Gotowy kod źródłowy z przykładem użycia:

Kod: Zaznacz cały

/*
 * @Author: http://haker.edu.pl/
 * @getLink($url) - Extract all links from URL
 */

function getLink($url) {
    $soruce = file_get_contents($url);

    $regEx = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
    if (preg_match_all("/$regEx/siU", $soruce, $foundLinks, PREG_SET_ORDER)) {
        $linki = array();
        $tmp = array();
        $sizeArray = sizeof($foundLinks);
        for ($i = 0; $i < $sizeArray; $i++) {
            $tmp[$i] = $foundLinks[$i][2];
        }
        $tmp = array_values(array_unique($tmp));

        $links = array();
        foreach ($tmp as $link) {
            array_push($links, trim($link));
        }
        return $links;
    }
}

//-------------------------------------
$links = getLink('http://wp.pl/');
foreach ($links as $link) {
    echo $link . '<br>';
}

Kenjin
Ekipa HEP
Posty: 122
Rejestracja: 04 sty 2016, 22:10

Re: [PHP] Pobieranie wszystkich linków ze strony www

Post autor: Kenjin » 07 sty 2016, 01:18

Na wstepie duzy PLUS za uzywanie regex'ow do tego, naprawde ulatwia to prace. Kiedys tez sie bawilem w proste web crawlery zwracajace linki(nawet gdzies mam pare skryptow, tyle ze ja uzywalem cURLa). W wolnej chwili chetnie to przetestuje i podziele sie wrazeniami, dzieki za skrypt.
Jedyna wada tego skryptu jest to ze zwraca takze linki macierzyste, czli prowadzace do tej samej domeny. Oczywiscie nie byloby w tym nic zlego gdyby zwracal z tej samej domeny ale z innego servera ale on leci od gory do dolu i zwraca tez podstrony :).

ODPOWIEDZ

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość