2011-03-27 96 views
3

我想用xpath從頁面刮取文本,現在我不斷收到錯誤,並且不知道爲什麼! - 記住,我是一個非常新的php用戶,這是一個我承擔的大學項目,它的推動非常具有挑戰性:P但是它應該是。用xpath進行刮取,出現錯誤

繼承人的代碼,

<?php 

$html = file_get_contents('http://www.amazon.co.uk/New-Apple-iPod-touch-Generation/dp/B0040GIZTI/ref=br_lf_m_1000333483_1_1_img?ie=UTF8&s=electronics&pf_rd_p=229345967&pf_rd_s=center-3&pf_rd_t=1401&pf_rd_i=1000333483&pf_rd_m=A3P5ROKL5A1OLE&pf_rd_r=1ZW9HJW2KN2C2MTRJH60'); 

$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$xpath = new DOMXpath($dom); 

$in_stock = $xpath->query("/html/body/div[@id='divsinglecolumnminwidth']/form[@id='handleBuy']/table[3]/tbody/tr[3]/td/div/span"); 



?> 

我得到以下錯誤...

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Unexpected end tag : head in Entity, line: 2664 in C:\xampp\htdocs\scraping\domxpath.php on line 19

一百倍!

任何幫助真的很感激! ,它必須是很容易解決:P

+0

它看起來像一個解析器錯誤... – 2011-03-27 14:50:32

回答

1
$xpath = new DOMXpath($dom); 

$expr = "/html/body/div[@id='divsinglecolumnminwidth']/form[@id='handleBuy']/table[3]/tr[3]/td/div/span"; 
$nodes = $xpath->query($expr); // returns DOMNodeList object 
// you can check length property i.e. $nodes->length 
echo $nodes->item(0)->nodeValue; // get first DOMNode object and its value 

還需要添加stametent爲suppressing errors。我認爲出於性能方面的原因,最好使用絕對XPath表達式,但相對來說// @表單[@ id ='handleBuy']/table [3]/tr [3]/td/div/span也適用,並且更具彈性。

1

也許試試這個:

//form[@id='handleBuy']/table[3]/tbody/tr[3]/td/div/span 
2

只是把這個行頭在你的代碼停止顯示錯誤,這是特別有用的,當你的文檔是一個HTML頁面,如果您不知道它是否是格式良好的XML文檔。

libxml_use_internal_errors(true); 

http://fr2.php.net/manual/fr/function.libxml-use-internal-errors.php

+0

謝謝,雖然我現在得到以下錯誤,現在似乎指的是回聲聲明。 可捕捉的致命錯誤:類DOMNodeList的對象無法轉換爲C:\ xampp \ htdocs \ scraping \ domxpath.php中的字符串27行 – Wade 2011-03-27 15:04:31

+0

您可能試圖回顯您的'$ in_stock'變量,但不能。這個變量是一個'DOMNodeList'元素(http://fr.php.net/manual/en/class.domnodelist.php),所以你只能通過'length'屬性看到它的大小,或者遍歷它來獲得'DOMNode' 。 – TrexXx 2011-03-27 15:07:51