Avatar billede rotco Juniormester
04. november 2008 - 00:04 Der er 11 kommentarer og
1 løsning

WebCrawler / Spider

Hejsa,

Jeg har lavet en søgemaskine, og alt der hører til så man kan søge i databasen mm. Indtil videre har jeg bare lavet sådan at man kan tilføje sider selv, men det er jo ikke det jeg ønsker.

Jeg ønsker at jeg skal kunne crawle nettet med et php script. Jeg vil naturligvis selv lave det med jeg ved sgu ikke hvor jeg skal starte for at være ærlig
Avatar billede coderdk Praktikant
04. november 2008 - 09:22 #1
Du skal vel finde alle links på siderne du crawler? Noget i stil med:

if ( preg_match_all( "#<a.*?href=[\"'](.*?)[\"'#si", $webside, $a ) )
{
  foreach ( $a[1] as $link )
  {
      // Indeksér $link
  }
}

I hvert tilfælde til at starte med ;)
Avatar billede rotco Juniormester
04. november 2008 - 16:55 #2
Ja altså, jeg skulle helst gerne have alle sider med.

Det skulle faktisk være lidt kompliceret, for jeg skulle helst gerne have 255 karaktere med fra beskrivelsen på hjemmesiderne, samt titlen på hjemmesiden, og så selvfølgelig links, og meta keywords.

Den kode der, laver en fejl, den giver mig:

Warning: preg_match_all() [function.preg-match-all]: Compilation failed: missing terminating ] for character class at offset 22 in /customers/ewrwer.dk/werwr.dk/httpd.www/test.php on line 5

hvilket jeg ikke helt forstår...
Avatar billede coderdk Praktikant
04. november 2008 - 17:04 #3
Der må være røget noget i svinget:

if ( preg_match_all( "#<a.*?href=[\"'](.*?)[\"']#si", $webside, $a ) )
{
  foreach ( $a[1] as $link )
  {
      // Indeksér $link
  }
}
Avatar billede rotco Juniormester
04. november 2008 - 17:49 #4
Arh ok... Burde den her ikke give et par links:

<?php

$webside = "http://www.eksperten.dk";

if ( preg_match_all( "#<a.*?href=[\"'](.*?)[\"']#si", $webside, $a ) )
{
  foreach ( $a[1] as $link )
  {
      // Indeksér $link
echo "$link<br>"; 
}
}

?>
Avatar billede jensgram Nybegynder
04. november 2008 - 20:01 #5
Nej, du mangler lige et trin mellem

$webside = "http://www.eksperten.dk";

og

if ( preg_match_all( "#<a.*?href=[\"'](.*?)[\"']#si", $webside, $a ) )

... at _hente_ indholdet fra $webside - se evt. file_get_contents() :)
Avatar billede rotco Juniormester
05. november 2008 - 15:16 #6
Okay... Jeg har nu fundet ud af hvordan jeg henter siden eksperten.dk men ikke hvordan jeg henter linkene se:

<?php

$url = "http://www.eksperten.dk";

$content=file_get_contents("$url",FALSE,NULL,0,200000);
echo $content;
?>
Avatar billede coderdk Praktikant
05. november 2008 - 15:43 #7
$url = "http://www.eksperten.dk";

$webside = file_get_contents( $url );

if ( preg_match_all( "#<a.*?href=[\"'](.*?)[\"']#si", $webside, $a ) )
{
  foreach ( $a[1] as $link )
  {
    echo "$link<br />";
  }
}
Avatar billede coderdk Praktikant
05. november 2008 - 15:45 #8
Du bør være opmærksom på absolutte og relative stier ;) Altså hvis du crawler videre på disse sider, så skal du checke om linkene starter med http:// - hvis ikke smider du lige domæne på ;)
Avatar billede rotco Juniormester
05. november 2008 - 15:56 #9
Hej,

lige inden du skrev det havde jeg fået det til at virke så alle linksene vises..

Det problem jeg så har nu er at de viser eksempelvis:

/artikler/1245?Esession=0b0e3f847b137885710b5d479636da3e

og jeg skulle jo gerne have domæne på... altså http://www.eksperten/


Derudover kan man hente noget indhold fra siderne? altså f.eks titlen på siden mm. ?
Avatar billede coderdk Praktikant
05. november 2008 - 16:10 #10
Ja, som jeg skriver skal du checke om det er absolutte eller relative links, og selv sætte protokol og host på. Du får titlen på siden du er inde på, sådan:

$titel = '';
if ( preg_match( "#<title>(.*?)</title>#si", $webside, $m ) )
{
  $titel = $m[1];
}

Det kræver naturligvis at der ER et title-tag.
Avatar billede rotco Juniormester
06. november 2008 - 13:36 #11
tak coder, kom med et svar :)
Avatar billede coderdk Praktikant
06. november 2008 - 14:01 #12
yessir :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester