WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hjälp med crawler! (https://www.wn.se/forum/showthread.php?t=1038430)

Lando 2009-10-08 00:34

Hjälp med crawler!
 
Hej alla!
Jag skall bygga en enkel crawler och jag behöver lite hjälp. Har någon en färdig funktion i PHP som plockar ut länkar ur en klump text och lägger dom i en array?

Tex:

$text = 'sdhdfjzfgkzfhlkzghl<a href="http://www.sdsdh.se">sdfhdzfjfdvkj</a>dsfhdfjdfj';

get_href($text, $array);

//$array = array('http://www.sdsdh.se');

Den måste kunna ta _alla_ länkar. Med eller utan www efter http://.

Tacksam för svar.

Clarence 2009-10-08 01:46

Enkelt och för det mesta tillräckligt:
Kod:

preg_match_all('#<a[^>]* href="([^"]+)"[^>]*>([\w\W]+)</a>#i', $text, $matches);
I $matches[1] hittar du dina länkar och i $matches[2] dina länktexter, förutsatt att det är (i vissa aspekter) korrekt HTML.

Lando 2009-10-08 01:55

Funkar inte alls. Kolla:

http://lando.se/c.php

//Kod

$text = file_get_contents("http://www.youtube.com");

preg_match_all('#<a[^>]* href="([^"]+)"[^>]*>([\w\W]+)</a>#i', $text, $matches);

header("Content-type: text/plain");
print_r($matches);

Jawn 2009-10-08 02:21

preg_match_all('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', $text, $matches);

Nerox 2009-10-08 02:29

Jag suger på regexp så gjorde en loop etc..


Kod:

function get_href($string) {
        $result = array();
        $x = 0;
        $array_1 = explode("href=\"",$string);
        foreach ($array_1 as $k => $v) {
                if(strstr($v,"http://") == true) {
                        $v = substr($v,0,stripos($v,"\""));
                        $result[$x++] = $v;
                }
        }
        return $result;

}


Clarence 2009-10-08 17:16

Citat:

Ursprungligen postat av Lando (Inlägg 20325336)
Funkar inte alls. Kolla:

http://lando.se/c.php

//Kod

$text = file_get_contents("http://www.youtube.com");

preg_match_all('#<a[^>]* href="([^"]+)"[^>]*>([\w\W]+)</a>#i', $text, $matches);

header("Content-type: text/plain");
print_r($matches);

Blev visst lite sent för regexp ;) Lägg till U modifiern så funkar den. Alltså:
Kod:

preg_match_all('#<a[^>]* href="([^"]+)"[^>]*>([\w\W]+)</a>#Ui', $text, $matches);
Notera dock att denna tar vilken text som helst i href, inte bara http-adresser


Alla tider är GMT +2. Klockan är nu 04:04.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson