Avatar billede pitzen Nybegynder
29. juni 2010 - 17:46 Der er 4 kommentarer og
1 løsning

Crawling af jobs

Hej exp.

Jeg forsøger at lave et system, som kan hente jobs fra diverse firmaers hjemmeside. Hertil vil jeg opsætte en script pr. virksomhed, som kan scanne deres jobbørs for jobs. Jeg har lavet et "main-script", som kalder de individuelle scripts, så det eneste mine crawlers skal kunne er, at:

- Finde URL'er på alle jobs
- Finde overskrifter for alle jobs
- Besøge ovenstående jobs og finde brødtekst omkring jobbet.

Jeg har delt processen op i to steps.
Step 1 henter URL'er og overskrifter og tilføjer dem til DB'en.
Step 2 besøger alle URL'er og henter teksten om jobbet.

Jeg har lavet et eksempel, som kan ses her:


<?php

header('Content-type: text/html; charset=utf-8');

if($run == "step1")
{
    // URL til jobsiden
    $url = "http://www.nordea.com/Career/51322.html?countryId=700a83fb-e796-482d-9ed6-e23dc4a28ada&areaId=00000000-0000-0000-0000-000000000000&categoryId=00000000-0000-0000-0000-000000000000";

    // Henter HTML for jobsiden
    $data = $curl->get($url);
    $data = explode("<div id=\"searchResultPanel\">", $data);
    $data = explode("newSearchButton", $data[1]);
    $data = explode("<a", $data[0]);

    // Fjerner overflødige keys
    $data = array_slice($data, 2);

    // Løber alle jobs igennem
    foreach($data as $link)
    {
        $head = explode("\">", $link);
        $head = explode("</a>", $head[1]);
        $head = $head[0];

        $url = explode("href=\"", $link);
        $url = explode("\"", $url[1]);
        $url = $url[0];
        $url = str_replace("http://www.nordea.com/sitemod/nordea_all/modules/JobModule/lookupjob.aspx?", "http://www.nordea.com/Karriere/View%2bjob/980954.html?", $url);
       
        $jobs[] = Array("head" => $head, "url" => $url);
    }

    // Returnerer alle URL'er og overskrifter til mainscript
    return $jobs;
}
elseif($run == "step2")
{
    // Henter HTML for jobbet
    $data = $curl->get($url);
    $text = explode("<P><U>", $data);
    $text = explode("<hr />", $text[1]);
    $text = $text[0];
    $text = strip_tags($text, '<br>,<b>,<strong>,<div>,<p>');
   
    // Returnerer text til mainscript
    return $text;
}

?>


Er der nogen der har et foreslag til hvordan dette kan gøres lettere? Jeg overvejer at lave rigtig mange crawlers, så det kan sagtens betale sig at kigge efter små forbedringer i metoden.

Jeg har kigget lidt på xpath, men har ikke fået det til at spille. Nogen der kender til det?

Et andet problem jeg også er stødt på er, hvis en side er kodet i .NET. Så skal alle cURL requests indeholde utrolig mange hidden values. Så som "__VIEWSTATE" og "__EVENTVALIDATION". Det betyder at en sådan crawler tager meget lang tid at lave og bliver 140 linier lang :(


Jeg håber i har nogle gode inputs :)
Avatar billede repox Seniormester
29. juni 2010 - 18:24 #1
Jeg vil godt være den første til at sige at du bør få styr på dine åbne spørgsmål - at have knap 2000 point ude signalerer ikke just et positivt resultatet i forbindelse med at deltage i dine tråde.
Avatar billede showsource Seniormester
29. juni 2010 - 23:41 #2
Og spm. er nu heller ikke et som lyder "svar-indbydende"
Avatar billede repox Seniormester
30. juni 2010 - 08:15 #3
Der er faktisk overraskende mange udbydere som gerne vil lave XML feeds til dig, såfremt du præsenterer din idé samt dit implementeringsforslag for dem. Det ville være væsentligt smartere end at forsøge at lave flere script til at pille relevant HTML ud.
Avatar billede pitzen Nybegynder
02. september 2010 - 09:08 #4
Hej,


Hvilke udbydere tænker du på her?
Avatar billede pitzen Nybegynder
04. oktober 2010 - 10:12 #5
lukker
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