|
|||||||||||
|
|
#1 |
|
/
Datum registracije: Oct 2006
Lokacija: /
Postovi: 2,053
|
Ž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 17:32. |
|
|
|
|
|
#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
|
|
|
|
#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. 03.11.2010. u 23:29. |
||
|
|
|
|
|
#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; |
|
|
|
|
|
#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> ![]() |
|
|
|
|
|
|
#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 17:08. |
|
|
|
|
|
#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);
![]() |
|
|
|
|
|
|
#8 |
|
..
Datum registracije: Oct 2001
Lokacija: Zagreb
Postovi: 2,735
|
zasto ne regex-om ih izvuci van? |
|
|
|
|
|
|
|
Oglas
|
|
![]() |
|
|