2012-07-30 74 views
6

我見過this question,但它並不真正滿足我在找什麼。這個問題的答案是:從元描述標籤中提取,第二個是爲您已經擁有正文的文章生成摘錄。PHP Scrape文章摘要像可讀性

我想要做的是實際得到文章的前幾句話,就像Readability一樣。最好的方法是什麼? HTML解析?這是我目前使用的,但這不是很可靠。

function guessExcerpt($url) { 
    $html = file_get_contents_curl($url); 

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

    $metas = $doc->getElementsByTagName('meta'); 

    for ($i = 0; $i < $metas->length; $i++) 
    { 
     $meta = $metas->item($i); 
     if($meta->getAttribute('name') == 'description') 
      $description = $meta->getAttribute('content'); 

    } 

    return $description; 
} 

function file_get_contents_curl($url) { 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

    $data = curl_exec($ch); 
    curl_close($ch); 

    return $data; 
} 
+0

你也可以看看[php-readability](http://code.fivefilters.org/php-readability/) – j0k 2013-06-17 21:24:31

回答

8

這裏是一個可讀性的PHP端口:https://github.com/feelinglucky/php-readability。去嘗試一下。提取結果與Readability類似(因爲它實現了Readability的算法)。

require 'lib/Readability.inc.php'; 

$html = file_get_contents_curl($url); 

$Readability  = new Readability($html, $html_input_charset); // default charset is utf-8 
$ReadabilityData = $Readability->getContent(); 

$title = $ReadabilityData['title']; 
$content = $ReadabilityData['content']; 

然後,您可以使用$content中的一些句子作爲摘錄。

+1

任何人都知道如何刮取相關的縮略圖/圖像嗎?可讀性完全符合我的要求。 – Swivel 2012-12-29 11:23:50

+1

@Swivelgames你發現如何獲得縮略圖嗎?我想要做類似的事情 – hellomello 2013-02-25 00:04:25

+2

@andrewliu我用來獲取縮略圖的方法有點多一點。我用'preg_match_all'和'/ /i'構建了一個包含所有圖像的數組。通過解析上面例子中的'$ url',我可以通過確定baseurl來將相對路徑轉化爲絕對路徑。然後我向用戶提供一個絕對圖像路徑的數組,供用戶選擇。您可以使用簡單的腳本創建縮略圖並將其保存在Web服務器上以顯示給用戶,或使用HTML進行縮放。 **發佈一個新問題並將鏈接粘貼到此處,然後我可以爲您提供特定的代碼。** – Swivel 2013-02-25 05:00:28