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 :)