2014-06-09 68 views
0

我想創建一個腳本來自動抓取維基百科頁面上特定類中的文本。例如,我想從維基百科頁面獲取音樂家Avicii的真名(Tim Bergling)。從谷歌的檢查元素我發現,他的名字被存儲在一個名爲「暱稱」類:PHP從另一個網站上的特定類中抓取文本

<td class="nickname">Tim Bergling</td> 

我想送綽號類的內容。我發現一些線程幫助我解決了一些代碼,但是我無法使它正常工作。這是我到目前爲止:

<?php 

$wiki= file_get_contents("http://en.wikipedia.org/wiki/Avicii"); 
preg_match("/\<td class\=\"nickname\"\>(.*?)\<\/td\>/",$wiki,$n); 
print $n; 

?> 

最終,我希望這個名字發送到我的網站上它將被顯示的特定類。就目前而言,我只是想讓它打印出來。謝謝:)

編輯:我應該澄清,我對PHP和編碼一般都很陌生,但我很快就把它撿起來了,我試圖推動自己。我非常感謝你的時間!

+0

我認爲這是比較容易做的客戶端使用jQuery的'阿賈克斯()'函數 –

+0

我有點熟悉的jQuery的,但不是阿賈克斯() 尤其是。我會看到我能找到並給它一個鏡頭。謝謝回覆。如果有人知道如何在PHP中完成這將是偉大的。最後,我想編寫另一個函數,它會自動搜索每個音樂家的維基百科頁面,然後調用該函數以刮掉維基頁面上的名稱,家鄉等。我不知道jquery中是否有可能,或者哪種語言會更好。 – Steve

回答

1

你應該使用DOMDocument類,而不是preg_match,請嘗試:

$html = file_get_contents("your url"); 
$DOM = new DOMDocument(); 
$DOM->loadHTML($html); 
$finder = new DomXPath($DOM); 
$classname = 'nickname'; 
$nodes = $finder->query("//*[contains(@class, '$classname')]"); 
foreach ($nodes as $node) { 
    echo $node->nodeValue; 
} 
+0

試過這個,但我在嘗試運行時遇到錯誤。 「致命錯誤:在第9行的」我的網站「中的非對象上調用成員函數query()。 – Steve

+0

oh對不起,用$ finder替換$ xpath,我的不好 –

+0

它像一個魅力一樣工作。 ,真的幫助我:) – Steve