| 
 | |||||||||||
|  03.11.2010., 18:26 | #1 | 
| / Datum registracije: Oct 2006 Lokacija: / 
					Postovi: 2,053
				 |  PHP & XPath Želio bih "skinuti" ZET-ov vozni red, tj. linkove na vozne redove...stvar je da mi prozuji kroz sve linkove osim zadnjih 6, ako spremim stranicu kao .HTML i nju probam "skinuti" - sve uredno prolazi. gdje je problem? možda u 6. linku odozdola koji sadrži "/(" u linku? to mi sad jedino pada na pamet, ali ne vidim to kao problem  uglavnom ispiše sve do /media/39180/182.pdf. nakon toga - ništa. Link je - http://www.zet.hr/autobus/dnevni.aspx Kod je Code: <?php    
    $target_url = "http://www.zet.hr/autobus/dnevni.aspx";
    
    $userAgent = 'IE 6 – Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';
    
    // make the cURL request to $target_url
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($ch, CURLOPT_URL,$target_url);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 50);
    $html= curl_exec($ch);
    if (!$html) {
        echo "<br />cURL error number:" .curl_errno($ch);
        echo "<br />cURL error:" . curl_error($ch);
        exit;
    }
    
    // parse the html into a DOMDocument
    $dom = new DOMDocument();
    @$dom->loadHTML($html);
    
    // grab all the on the page
    $xpath = new DOMXPath($dom);
    $hrefs = $xpath->evaluate("/html/body/div[@id='container']/div[@id='content']/div[@id='autobus']/ul/li//a");
    echo "length: " . $hrefs->length;
        
    for ($i = 0; $i < $hrefs->length; $i++) {
        $href = $hrefs->item($i);
        $url = $href->getAttribute('href');
        echo "<br />" . ($i+1) . " | " . $url;
    }
?> Zadnje izmijenjeno od: svebee. 03.11.2010. u 18:32. | 
|   |   | 
|  03.11.2010., 20:13 | #2 | 
| crnjo Datum registracije: Mar 2003 Lokacija: Zagreb 
					Postovi: 1,907
				 | Jesi probao stavit u for petlju ovako nesto: for ($i = 0; $i < ($hrefs->length)+6 ; $i++) pa vidi dal prolazi do kraja onda. Ako prolazi, nemam pojma koja je greska  Ali ako ni to ne radi, onda ovaj $xpath->evaluate vjerojatno ne registrira sve URLove unutar containera autobus, tj. ja sam ovako nabrzaka prebrojao 5 komada sa HR slovima, š special characterima, mozda sam fulo sesti, a to bi taman bilo tih par koji ti fale, pa zato $hrefs ima manjak linkova (pretpostavljam da je $hrefs polje URLova?). mozes probat ovaj output sa URL-ovima izbacit u file prvo, pa onda rucno provjeri URL-ove u HTML-u i ove koje si dobio parsanjem... Ako nisam pomogao, mozda tebi sine neka ideja   
				__________________ 9900K-32GB-5TB-3060TI | 
|   |   | 
|  | |
| 
			Oglas
		 |  | 
|  03.11.2010., 23:05 | #3 | ||
| / Datum registracije: Oct 2006 Lokacija: / 
					Postovi: 2,053
				 | Citiraj: 
 Code: Fatal error: Call to a member function getAttribute() on a non-object in scrapper.php on line 33 Citiraj: 
  nije mi jasno... EDIT: usput čak i ako stavim Code: $hrefs = $xpath->evaluate("//a"); Zadnje izmijenjeno od: svebee. 04.11.2010. u 00:29. | ||
|   |   | 
|  04.11.2010., 12:39 | #4 | 
| the letter Datum registracije: Sep 2005 Lokacija: 127.0.0.1 
					Postovi: 794
				 | Jesi probao ispisati sadržaj $dom-a (innerxml ili innerhtml ili nešto slično) pa da vidiš dali ti je dobro isparsirana stranica? Nakon toga (ako parsira dobro) bih spremio $dom u neki xml file i otvorio ga u IE-u koji ima dobar XML preglednik pa da vidiš kako ga čita. Možda ti da neki hint gdje je greška... Niti ja ne vjerujem da je zagrada u linku problem jer se radi o atributu definiranom sa navodnicima ali ako sumnjaš na to možeš snimiti cijelu stranicu u html lokalno, izmijeniti taj link pa ga naloadati u DOM. 
				__________________ Exception up = new Exception("Illegal operation."); throw up; | 
|   |   | 
|  04.11.2010., 17:39 | #5 | |
| / Datum registracije: Oct 2006 Lokacija: / 
					Postovi: 2,053
				 | Citiraj: 
 međutim da, kada izbacim DOM van - dođe taman nakon linije 182.pdf i tu stane - pozatvara sve div-ove, html i body tag. Code: <li><a HREF="/media/39180/182.pdf" TARGET="_blank">182 TRG MLADOSTI - ŠIBICE</a> </li></ul></li><li><span>ZAPRUÄ</span></li></ul></div></div></div></body> </html>  | |
|   |   | 
|  04.11.2010., 18:02 | #6 | 
| the letter Datum registracije: Sep 2005 Lokacija: 127.0.0.1 
					Postovi: 794
				 | Eto ti problema   Možeš ti xpathati do besvijesti ali loadHTML ne radi dobro tj. ne parsira html do kraja. Ajde probaj ručno ukloniti onu zagradu pa ga naloadati u DOM iz datoteke... Probao bih i sam ali ne radim u PHP-u nego u .netu i vjerujem da su parseri (poprilično) drugačiji. I da, dobrodošao u čaroban svijet parsiranja HTML-a kroz DOM  EDIT: Sad sam tek vidio ovo: Code: <span>ZAPRUÄ</span> 
				__________________ Exception up = new Exception("Illegal operation."); throw up; Zadnje izmijenjeno od: doublev. 04.11.2010. u 18:08. | 
|   |   | 
|  04.11.2010., 18:48 | #7 | |
| / Datum registracije: Oct 2006 Lokacija: / 
					Postovi: 2,053
				 | Citiraj: 
  Code:     $dom = new DOMDocument();
    $html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");
    @$dom->loadHTML($html); | |
|   |   | 
|  05.11.2010., 01:12 | #8 | 
| .. Datum registracije: Oct 2001 Lokacija: Zagreb 
					Postovi: 2,735
				 | zasto ne regex-om ih izvuci van? | 
|   |   | 
|  | |
| 
			Oglas
		 |  | 
|  | 
| 
 | 
 |