2013-12-17 11 views
1

我想寫一個文檔,將通過編碼很差並返回標題元素的網頁。然而,製作我計劃抓取的網站的人沒有使用任何類,僅僅是div元素。繼承人的源網頁我試圖刮:試圖檢索文本只從與xpath的div

<tbody> 
<tr> 
<td style = "..."> 
<div style = "..."> 
<div style = "...">TEXT I WANT</div> 
</div> 
</td> 
</tr> 
</tbody> 

,當我在鉻複製的XPath我得到這個字符串:

/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[1]/td/div/div[3] 

我有麻煩搞清楚我把這個字符串在xpath查詢中。 如果不是xpath查詢,也許我應該做一個preg_match?

我嘗試這樣做:

$location = '/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[1]/td/div/div[3]'; 
$html = file_get_contents($URL); 
$doc = new DomDocument(); 
$doc->loadHtml($html); 
$xpath = new DomXPath($doc); 
// Now query the document: 
foreach ($xpath->query($location) as $node) { 
    echo $node, "\n"; 
} 

但沒有打印的頁面。

謝謝。

編輯:全SOURSE代碼在這裏: http://pastebin.com/K5tZ4dFH

EDIT2:清潔代碼屏幕截圖:http://i.imgur.com/lWKheBy.png

+0

嘗試回聲'$ node-> item(0);'循環內。 – Rikesh

+0

沒有任何輸出。該頁面不是很乾淨的編碼,我可能需要清理DOM?其他代碼似乎有東西來清理它,但方法錯誤了,我找不到任何有關該方法的文檔。 @Rikesh –

+0

@hwnd其上面的代碼,但代碼非常混亂,我試圖縮短它。編輯與一個pastebin源 –

回答

1

從查看你的源,請嘗試以下操作:

$html = file_get_contents($URL); 

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

$xpath = new DOMXPath($doc); 
$nodes = $xpath->query("//div[contains(@style, 'left:20px')]"); 

foreach ($nodes as $node) { 
    echo $node->textContent; 
} 
+0

是的,我只是減少了源代碼,因爲它很混亂。如果你能理解它,我添加了一個源代碼的pastebin。 –

+0

http://i.imgur.com/lWKheBy.png 也許這張圖片會有所幫助,它顯示的代碼更有條理。 我試圖從網站上獲取某些內容的標題。 –

+0

@Vipercode嘗試編輯的答案。 – hwnd

1

它看起來像你想要在第一個</div>之前的文本,所以這個正則表達式會發現:

[^<>]+(?=<\/div>) 

這是live demo