2011-01-12 66 views
38

鑑於新聞文章的網頁(來自任何主要新聞來源,如時間或bloomberg),我想確定該網頁上的主要文章內容,並拋出其他misc元素如廣告,菜單,側邊欄,用戶評論。Web抓取 - 如何識別網頁上的主要內容

這樣做的一般方法是什麼,可以在大多數主要新聞網站上使用?

數據挖掘有哪些好的工具或庫? (最好是基於python的)

+5

看到Readability`書籤是如何實現的`http://lab.arc90.com/experiments/readability/ – jfs 2011-01-12 18:07:38

+0

一這樣做的瀏覽器將對在線廣告構成巨大威脅。 – 2011-01-12 18:29:12

+2

原始書籤的代碼在這裏:http://code.google.com/p/arc90labs-readability/source/browse/`可讀性`現在是一種服務,它的代碼不可用。 – lsh 2014-03-09 21:47:48

回答

4

沒有辦法做到這一點可以保證正常工作,但是你可以使用的一種策略是試圖找到裏面最明顯文本的元素。

4

提取該頁面上的RSS提要(<link type="application/rss+xml" href="..."/>)並解析提要中的數據以獲取主要內容可能會更有用。

+0

注意:對於ATOM提要`type =「application/atom + xml」` – nedk 2011-01-12 17:59:20

+0

一個好主意,但這可能會被打或失,因爲很多提要只包含文章摘要。這是可以理解的,因爲大多數新聞網站的重點是讓你查看廣告,而這通常不會在RSS閱讀器中。 – Cerin 2011-01-13 02:23:53

0

我不會試圖從網頁上刮掉它 - 太多的東西可能會搞砸 - 而是看看哪些網站發佈RSS提要。例如,監護人的RSS feed有大部分文字從他們的重要文章:

http://feeds.guardian.co.uk/theguardian/rss

我不知道,如果泰晤士報(倫敦時報,不是紐約州)之一,因爲它是一個付費牆。祝你好運...

+0

我見過的大多數RSS提要只有短文摘要。 – kefeizhou 2011-01-12 18:02:49

27

有很多方法可以做到這一點,但是,沒有人會一直工作。這裏有兩個最簡單的:

  • ,如果它是一個已知的有限集合網站:在您的刮刀將每個URL從正常的URL到打印網址指定網站(不能真正跨站點一概而論)
  • 使用arc90可讀性算法(參考實現在JavaScript中)http://code.google.com/p/arc90labs-readability/。這個算法的簡短版本是在它們內部尋找帶有p標籤的div。它不適用於某些網站,但通常很不錯。
3

將「真實」內容與噪聲分開的另一種可能性是通過HTML頁面各部分的measuring HTML density

您將需要一些實驗來提取「真實」內容的閾值,我想您可以通過在識別出有趣的內容之後應用啓發式來指定HTML片段的確切範圍來改進算法。

更新:剛剛發現上面的網址現在不工作; here is an alternative link複製到archive.org的緩存版本。

8

前一段時間,我爲此任務寫了一個simple Python script。它使用啓發式將文本塊根據它們在DOM中的深度分組在一起。然後認爲文本最多的組是主要內容。這並不完美,但通常適用於新聞網站,文章通常是最大的文本分組,即使分成多個div/p標籤。

你會使用腳本,如:python webarticle2text.py <url>

8

Diffbot提供免費的(10。000 URL)的API來做到這一點,不知道這種做法是你在找什麼,但它可能會幫助別人http://www.diffbot.com/

6

對於Java的解決方案來看看https://code.google.com/p/boilerpipe/

的boilerpipe庫提供算法來檢測和消除網頁主要文本內容周圍的多餘「混亂」(樣板,模板)。

該圖書館已經爲常見任務提供了特定的策略(例如:新聞文章提取),並且也可以很容易地針對單個問題設置進行擴展。

但也有解決這個可以在這裏找到一個Python包裝:

https://github.com/misja/python-boilerpipe