Beginnen bij 1 en eindigt als laatste

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander C

Sander C

16/06/2009 13:14:00
Quote Anchor link
Hoi,

Ik wil van een website alle links gaan spideren. Ik gebruik geen database, maar een txt bestand om bepaalde reden.

Alle landen uit die website zijn in de txt bestand gespiderd. Maar in die landenpagina staan nog meer links en die wil ik ook gaan spideren.

Met foreach krijg ik alle landen tekstbestand netjes onder elkaar. Geen probleem dus. Als ik begint met landenpagina te gaan spideren, krijg ik de laatste land gespiderd ipv 1e land. Hoe kan ik dat best oplossen?

De code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
function getBron($url){

    $useragent    = "Googlebot/2.1 (http://www.googlebot.com/bot.html)";

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    $bestand = curl_exec($ch);
    curl_close($ch);

    return $bestand;

}

function getLinks($url){

//global $land;
    $pagina = getBron($url);

    $tag_lijst = array ();
    $tag_lijst = explode(">", $pagina);

    $links     = array();
    $regs     = array();

    while (list ($id, $htmlTag) = each($tag_lijst)){

    if (stristr($htmlTag, "href")) {

            preg_match("/(href)\s*=\s*[\'\"]?(([[a-z]{3,5}:\/\/(([.a-zA-Z0-9-])+(:[0-9]+)*))*([+:%\/\?~=&;\\\(\),._ a-zA-Z0-9-]*))(#[.a-zA-Z0-9-]*)?[\'\" ]?(\s*rel\s*=\s*[\'\"]?(nofollow)[\'\"]?)?/i", $htmlTag, $regs);

            $links[] = $regs[2];

        }

    }

 foreach ($links as $item => $value){

 $fh = fopen($land.'.txt', 'a');
 fwrite( $fh, sprintf("%s\r\n", $value ) );
 fclose( $fh );

  print_r($value);
 }
}

$data = file ("landen.txt");
    foreach ($data as $value) {
        $land = explode ('\t\n', $value);
       getLinks($land[0]);
    }


Met de code ziet niks mis aan...Wie weet dus hoe ik elk land in lusje kan stoppen en begint met nieuwe wanneer de 1e klaar is..en ga zo door tot einde van de regel.
Gewijzigd op 01/01/1970 01:00:00 door Sander C
 
PHP hulp

PHP hulp

24/04/2024 19:52:11
 

16/06/2009 13:23:00
Quote Anchor link
Ik weet niet of dit wel mag. Je doet je voor als google bot, terwijl je dat niet bent. Klopt niet, is niet goed.
Verder haal je data van een (?) site(s), dat mag ook niet zo 1-2-3.
Ook snap ik je probleem niet echt.
Gewijzigd op 01/01/1970 01:00:00 door
 
Sander C

Sander C

16/06/2009 13:28:00
Quote Anchor link
Ik heb toestemming gekregen om informatie van de site te spideren en scrapen. Omdat die persoon niks anders heeft om aan te bieden zoals xml of iets dergelijks. Deze manier is de laatste oplossing.

Wat die Googlebot betreft...die heb ik ergens vandaan gehaald. Die moet ik nog veranderen.

En de probleem is duidelijk..ik wil de 1e link laten spideren ipv de laatste link. In de lijstje staan 160 landen.
Gewijzigd op 01/01/1970 01:00:00 door Sander C
 
Kumkwat Trender

Kumkwat Trender

16/06/2009 13:33:00
Quote Anchor link
break; is om je lus te stoppen, maar ik snap je niet echt :S. Probeer duidelijker te zijn..

Edit:
Wat wil je gaan doen? Alle actieve links en dode links van dat pagina eruit halen of zo?
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
 
Sander C

Sander C

16/06/2009 13:47:00
Quote Anchor link
Gewoon alle links van de pagina eruit halen..

Maar ik heb een textbestand met alle landen in. Als ik dat landen gaan spideren, pakt ie de laatste land ipv 1e land.

Ik moet met 1e land beginnen, alle links spideren en opslaan in textbestand met naam. Eenmaal klaar is, dan begint ie met volgend land. Het blijft herhalen tot alle landen zijn gedaan.

Dat is in dat geval niet..en dat is dus de probleem.
 
The Force

The Force

16/06/2009 15:13:00
Quote Anchor link
Ik denk dat de meeste huiverig zijn hier te helpen aangezien het een vreemd verhaal is en mogelijk illegaal. Zou je wat meer openheid van zaken kunnen geven? Welke website wil je spideren? Waarom wil je geen database gebruiken? "Gewoon alle links van de pagina eruit halen.." is erg vaag. Sorry voor het wantrouwen maar ik denk dat die antwoorden jouw verhaal een stuk duidelijker maken ;)
 
Kumkwat Trender

Kumkwat Trender

17/06/2009 17:54:00
Quote Anchor link
Owkeej

we hebben je antwoord nog niet gekregen maar ik heb je code even verbeterd..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
error_reporting(E_ALL);
class spider {

    function
__construct($bot,$input_file,$output_file='',$output_ext='.txt') {
        $this->useragent    = $bot;
        $this->input_f        = $input_file;
        $this->output_f        = $output_file;
        $this->output_ext    = $output_ext;
        $this->logs_dir        = 'spider';

        $this->counter        = 0;

        if(!file_exists('spider')) {
            echo '<font color="blue">Map aangemaakt</font><br>';
            mkdir("spider", 0777);
        }

        $this->score_out();
    }

    function
score_out() {
        if(!file_exists($this->input_f)) {
            exit('<font color="red">'.htmlentities($this->input_f).' is niet aangemaakt</font>');
        }
else {
            $word        = file($this->input_f);
            if(count($word)!=$this->counter) {
                $this->url    = $word[$this->counter];
                $this->url = str_replace(PHP_EOL,'', $this->url);
                $this->counter++;


                if($this->get_links()) {
                    echo '<font color="green">'.htmlentities($this->url).' is succesvol aangemaakt en gespidert</font><br>';
                    $this->score_out();
                }
else {
                    echo '<font color="red">'.htmlentities($this->url).' is niet gespidert</font><br>';
                    $this->score_out();
                }
            }
        }
    }


    function
auth(){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

    function
get_links(){
        preg_match('/[^.]+\.[^.]+$/', $this->url, $name);
        $name    = str_replace('/','_',$name[0]);
        $url_afk    = $this->logs_dir.'/'.$this->output_f.$name.$this->output_ext;

        if(file_exists($url_afk)) {
            return false;
        }
else {
            preg_match_all('#href="(.+?)"#si',$this->auth(),$func);

            foreach ($func[1] as $item => $value){
                $fh = fopen($url_afk, 'a');
                fwrite($fh, sprintf("%s\r\n", $value ));
                fclose($fh);
            }

            return true;
        }
    }
}



$bot = "PeterBot v1";
$spider    = new spider($bot,'links.txt');
?>


links.txt


Output:
Map aangemaakt
http://www.google.nl is succesvol aangemaakt en gespidert
http://www.phphulp.nl is succesvol aangemaakt en gespidert
http://www.google.com is succesvol aangemaakt en gespidert


Nja zoals voorgaande reacties al duidelijk word, word een fake user agent van google of andere bestaande spiders tegen gegaan. Daarom waarschuw ik je ook met het gebruiken van dit.. Het gebruiken/veranderen naar een spider die reeds gebruikt word en/of foutief gebruiken is jouw verantwoordelijkheid..
 

17/06/2009 18:50:00
Quote Anchor link
Peter schreef op 17.06.2009 17:54:
Nja zoals voorgaande reacties al duidelijk word, word een fake user agent van google of andere bestaande spiders tegen gegaan. Daarom waarschuw ik je ook met het gebruiken van dit.. Het gebruiken/veranderen naar een spider die reeds gebruikt word en/of foutief gebruiken is jouw verantwoordelijkheid..

Dat wordt niet tegen gegaan hoor. Je spooft die user agent, en dat mag niet.
 
Sander C

Sander C

17/06/2009 22:56:00
Quote Anchor link
Wat de script betreft..is al door mij opgelost. Peter..heel erg bedankt voor de code. Helaas is die moeite voor niks geweest.

Na intensief overleg met de klant heeft hij toch besloten om daarvan af te zien. Al deze werk is dus voor niks geweest. Wat er verder gaat gebeuren weet ik nog niet.

Dus als er een moderator hier leest..graag hele bericht verwijderen.
 
Kumkwat Trender

Kumkwat Trender

17/06/2009 23:39:00
Quote Anchor link
berichten worden niet verwijderd, en zoveel werk was het ook weer niet (ong 10 min)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.