2011-08-24 25 views
0

我們正在構建某種類型的digg網站並希望自動獲取有限的文本(2-3個句子)。它可以是文章的最後3個句子,如果那會更容易。在momemt中,我們可以在沒有問題的情況下獲取網頁內容,但想要使通用腳本獲得幾個句子。我們希望避免爲每個想要獲得內容的網站製作自定義腳本。如何從網頁上的文本正文中提取前幾句話

我在想按點找到文本塊。在近距離找到點,而不是在點周圍找文字。這是個不錯的主意。有人有一些其他的想法如何提取正文的文本。

我們不想刮滿全部內容。

謝謝。

+0

對不起,你的問題不是很清楚 - 你想知道如何只下載頁面的一部分?或者你想知道如何執行字符串操作,只需挖掘幾句話? – JonnyReeves

+0

對不起,沒有解釋。我需要字符串操作方面的幫助。我從網頁中獲取內容,去掉HTML,然後需要從主文本文本中得到2-3個句子。不知道該怎麼做。 – Croky

+0

好吧,我建議你用你的問題來回答你的問題並編輯標題;例如,'scrape'用在錯誤的上下文中,你的問題更多的是'如何從文本體中提取第一個X句子?' – JonnyReeves

回答

1

您可以查找文檔中標記較少且垂直空白較少的大部分。下載頁面的源代碼並使用strip_tags()刪除任何標記。然後,您可以使用正則表達式搜索連續五個句子。

下面是一個示例腳本。它使用一個不包含的類(curl_multi函數的抽象),但是這個類與你的問題並不相關。

<?php 

require_once("./../MultipleRequester.php"); 

$requester = new MultipleRequester(); 

$requester->addGetRequest('test', 'http://www.businessweek.com/news/2011-08-24/gold-tumbles-most-since-march-2008-as-demand-for-haven-wanes.html'); 
$requester->execute(); 
$content = $requester->getContent('test'); 

$plainText = strip_tags($content); 

$search = preg_match('/(\h{0,2}\v{0,2}\h{0,2}[A-Z]{1}[A-z0-9 ,\'")(.$]{10,1000}\.){2,5}/', $plainText, $matches); 

if($search) 
    print trim($matches[0]); 
else 
    print "Could not extract anything."; 

print "\n\n"; 
?> 

此打印:

美元兌六種主要貨幣市場擔心美國聯邦儲備委員會主席本·伯南克是否將在本週表示,央行願意提供更多的猜測刺激經濟。央行行長本週在懷俄明州的傑克遜霍爾會面,討論美國的經濟復甦問題。

對於標記其內容的網站,您可能仍然遇到問題。您可能希望使正則表達式更加寬鬆,尤其是對空白字符。

正則表達式有點混亂,但您可以調整它或自己寫。