爬蟲智能解析庫 Readability 和 Newspaper 的用法

 css

閱讀本文大概須要 10 分鐘。html

 


node

輿情爬蟲是網絡爬蟲一個比較重要的分支,輿情爬蟲每每須要爬蟲工程師爬取幾百幾千個新聞站點。好比一個新聞頁面咱們須要爬取其標題、正文、時間、做者等信息,若是用傳統的方式來實現,每個站點都要配置很是多的規則,若是要維護一個幾百上千的站點,那人力成本簡直過高了。
python

若是有一種方式能夠在保證差很少的準確率的前提下,大幅提升提取效率的話,就須要用到智能文本提取了。git

本文首先介紹一下智能文本提取的基本原理,讓你們對智能提取有基本的瞭解。而後介紹幾個比較基礎的工具包,準確率並非很高,能夠嘗試一用。最後再介紹幾篇比較前沿的技術供你們參考。github

智能文本提取

目前來講,智能文本提取能夠分爲三類:算法

  • 基於網頁文檔內容的提取方法數據庫

  • 基於 DOM 結構信息的提取方法vim

  • 基於視覺信息的提取方法瀏覽器

基於網頁文檔的提取方法將 HTML 文檔視爲文本進行處理,適用於處理含有大量文本信息且結構簡單易於處理的單記錄網頁,或者具備實時要求的在線分析網頁應用。這種方式主要利用天然語言處理相關技術實現,經過理解 文本語義、分析上下文、設定提取規則等,實現對大段網頁文檔的快速處理。其中,較爲知名的方法有TSIMMIS、Web-OQL、Serrano、FAR-SW 和 FOREST,但這些方法因爲一般須要人工的參與,且存在耗時長、效率低的弊端。

基於 DOM 結構信息的方法將 HTML 文檔解析爲相應的 DOM 樹,而後根據 DOM 樹的語法結構建立提取規則, 相對於之前的方法而言有了更高的性能和準確率。W4F 和 XWRAP 將 HTML 文檔解析成 DOM 樹,而後經過組件化引導用戶經過人工選擇或者標記生成目標包裝器代碼。Omini、IEPAD 和 ITE 提取 DOM 樹上的關鍵路徑, 獲取其中存在的重複模式。MDR 和 DEPTA 挖掘了頁面中的數據區域,獲得數據記錄的模式。CECWS 經過聚類算法從數據庫中提取出自同一網站的一組頁面,並進行 DOM 樹結構的對比,刪除其中的靜態部分,保留動態內容做爲信息提取的結果。雖然此類方法相對於上一類方法 具備較高的提取精度,且克服了對大段連續文本的依賴, 但因爲網頁的 DOM 樹一般較深,含有大量 DOM 節點, 所以基於 DOM 結構信息的方法具備較高的時間和空間消耗。目前來講,大部分原理仍是基於 DOM 節點的文本密度、標點符號密度等計算的,其準確率仍是比較可觀的。今天所介紹的 Readability 和 Newspaper 的庫的實現原理就是相似。

目前比較先進的是基於視覺信息的網頁信息提取方法,經過瀏覽器接口或者內核對目標網頁預渲染,而後基於網頁的視覺規律提取網頁數據記錄。經典的 VIPS 算法首先從 DOM 樹中提取出全部合適的頁面區域,而後根據這些頁面和分割條從新構建 Web 頁面的語義結構。做爲對 VIPS 的拓展,ViNT、ViPER、ViDE 也成功利用了網頁的視覺特徵來實現數據提取。CMDR 爲經過神經網絡學習多記錄型頁面中的特徵,結合基於 DOM 結構信息的 MDR 方法,挖掘社區論壇頁面的數據區域。與上述方法不一樣,VIBS 將圖像領域的 CNN 卷積神經網絡運用於網頁的截圖,同時經過類 VIPS 算法生成視覺塊,最後結合兩個階段的結果識別網頁的正文區域。另外還有最新的國內提出的 VBIE 方法,基於網頁視覺的基礎上改進,能夠實現無監督的網頁信息提取。

以上內容主要參考自論文:《王衛紅等:基於可視塊的多記錄型複雜網頁信息提取算法》,算法可從該論文參考文獻查閱。

下面咱們來介紹兩個比較基礎的工具包 Readability 和 Newspaper 的用法,這兩個包經我測試其實準確率並非很好,主要是讓你們大體對智能解析有初步的理解。後面還會介紹一些更增強大的智能化解析算法。

Readability

Readability 其實是一個算法,並非一個針對某個語言的庫。其主要原理就是計算了 DOM 的文本密度,另外根據一些常見的 DOM 屬性如 id、class 等計算了一些 DOM 的權重,最後分析獲得了對應的 DOM 區塊,進而提取出具體的文本內容。

如今搜索 Readability 其實已經找不到了,取而代之的是一個 JavaScript 工具包,叫作 mercury-parser,據我所知應該是 Readability 不維護了,換成了 mercury-parser。後者如今也作成了一個 Chrome 插件,你們能夠下載使用一下。

迴歸正題,此次主要介紹的是 Python 的 Readability 實現,如今其實有不少開源版本,本文選取的是 https://github.com/buriy/python-readability,是基於最先的 Python 版本的 Readability 庫 https://github.com/timbertson/python-readability 二次開發的,如今已經發布到了 PyPi,你們能夠直接下載安裝使用。

安裝很簡單,經過 pip 安裝便可:

pip3 install readability-lxml

安裝好了以後即可以經過導入 readability 使用了,下面咱們隨便從網上找一個新聞頁面,好比:https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html,其頁面截圖以下:

頁面示例

咱們的目的就是它的正文、標題等內容。下面咱們用 Readability 試一下,示例以下:

import requests
from readability import Document

url = 'https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html'
html = requests.get(url).content
doc = Document(html)
print('title:', doc.title())
print('content:', doc.summary(html_partial=True))

在這裏咱們直接用 requests 庫對網頁進行了請求,獲取了其 HTML 頁面內容,賦值爲 html。

而後引入了 readability 裏的 Document 類,使用 html 變量對其進行初始化,而後咱們分別調用了 title 方法和 summary 方法得到了其標題和正文內容。

這裏 title 方法就是獲取文章標題的,summary 就是獲取文章正文的,可是它獲取的正文可能包含一些 HTML 標籤。這個 summary 方法能夠接收一個 html_partial 參數,若是設置爲 True,返回的結果則不會再帶有 <html><body> 標籤。

看下運行結果:

title: 今年iPhone只有小改進?分析師:還有其餘亮點_網易科技
content: <div><div class="post_text" id="endText">           
                    <p class="otitle">
                        (原標題:Apple Bets More Cameras Can Keep iPhone Humming)
                    </p>
                    <p class="f_center"><img alt="今年iPhone只有小改進?分析師:還有其餘亮點" src="http://cms-bucket.ws.126.net/2019/09/09/d65ba32672934045a5bfadd27f704bc1.jpeg"/><span>圖示:蘋果首席執行官蒂姆·庫克(Tim Cook)在6月份舉行的蘋果全球開發者大會上。</span></p><p>網易科技訊 9月9日消息,據國外媒體報道,和過去的12個年頭同樣,新款
... 中間省略 ...
                    <p>蘋果還即將推出包括電視節目和視頻遊戲等內容的新訂閱服務。分析師表示,該公司最先可能在本週宣佈TV+和Arcade等服務的價格和上線時間。</p><p>Strategy Analytics的尼爾·莫斯頓(Neil Mawston)表示,可穿戴設備和服務的結合將是蘋果業務超越iPhone的關鍵。他說,上一家手機巨頭諾基亞公司在試圖進行相似業務轉型時就陷入了困境之中。(辰辰)</p><p><b>相關報道:</b></p><p><a href="https://tech.163.com/19/0908/09/EOHS53RK000999LD.html" target="_self" urlmacroreplace="false">iPhone 11背部蘋果Logo改成居中:爲反向無線充電</a></p><p><a href="https://tech.163.com/19/0907/08/EOF60CBC00097U7S.html" target="_self" urlmacroreplace="false">2019年新iPhone傳言彙總,你以爲哪些能成真</a>  </p><p/>
                        <p/>
                        <div class="ep-source cDGray">
                            <span class="left"><a href="http://tech.163.com/"><img src="https://static.ws.126.net/cnews/css13/img/end_tech.png" alt="王鳳枝" class="icon"/></a> 本文來源:網易科技報道  </span>
                            <span class="ep-editor">責任編輯:王鳳枝_NT2541</span>
                        </div>
                </div> 
</div>

能夠看到,標題提取是正確的。正文其實也是正確的,不過這裏還包含了一些 HTML 標籤,好比 <img><p> 等,咱們能夠進一步經過一些解析庫來解析。

看下源碼吧,好比提取標題的方法:

def normalize_entities(cur_title):
    entities = {
        u'\u2014':'-',
        u'\u2013':'-',
        u'&mdash;''-',
        u'&ndash;''-',
        u'\u00A0'' ',
        u'\u00AB''"',
        u'\u00BB''"',
        u'&quot;''"',
    }
    for c, r in entities.items():
        if c in cur_title:
            cur_title = cur_title.replace(c, r)

    return cur_title

def norm_title(title):
    return normalize_entities(normalize_spaces(title))

def get_title(doc):
    title = doc.find('.//title')
    if title is None or title.text is None or len(title.text) == 0:
        return '[no-title]'

    return norm_title(title.text)

 def title(self):
    """Returns document title"""
    return get_title(self._html(True))

title 方法實際上就是調用了一個 get_title 方法,它怎麼作的?實際上就是用了一個 XPath 只解析了 <title> 標籤裏面的內容,別的沒了。若是沒有,那就返回 [no-title]

def summary(self, html_partial=False):
    ruthless = True
    while True:
        self._html(True)
        for i in self.tags(self.html, 'script''style'):
            i.drop_tree()
        for i in self.tags(self.html, 'body'):
            i.set('id''readabilityBody')
        if ruthless:
            self.remove_unlikely_candidates()
        self.transform_misused_divs_into_paragraphs()
        candidates = self.score_paragraphs()

        best_candidate = self.select_best_candidate(candidates)

        if best_candidate:
            article = self.get_article(candidates, best_candidate,
                                       html_partial=html_partial)
        else:
            if ruthless:
                ruthless = False
                continue
            else:
                article = self.html.find('body')
                if article is None:
                    article = self.html
        cleaned_article = self.sanitize(article, candidates)
        article_length = len(cleaned_article or '')
        retry_length = self.retry_length
        of_acceptable_length = article_length >= retry_length
        if ruthless and not of_acceptable_length:
            ruthless = False
            continue
        else:
            return cleaned_article

這裏我刪除了一些冗餘的調試的代碼,只保留了核心的代碼,其核心實現就是先去除一些干擾內容,而後找出一些疑似正文的 candidates,而後再去尋找最佳匹配的 candidates 最後提取其內容返回便可。

而後再找到獲取 candidates 方法裏面的 score_paragraphs 方法,又追蹤到一個 score_node 方法,就是爲每個節點打分的,其實現以下:

def score_node(self, elem):
    content_score = self.class_weight(elem)
    name = elem.tag.lower()
    if name in ["div""article"]:
        content_score += 5
    elif name in ["pre""td""blockquote"]:
        content_score += 3
    elif name in ["address""ol""ul""dl""dd""dt""li""form""aside"]:
        content_score -= 3
    elif name in ["h1""h2""h3""h4""h5""h6""th""header""footer""nav"]:
        content_score -= 5
    return {
        'content_score': content_score,
        'elem': elem
    }

這什麼意思呢?你看若是這個節點標籤是 div 或者 article 等可能表徵正文區塊的話,就加 5 分,若是是 aside 等表示側欄的內容就減 3 分。這些打分也沒有什麼很是標準的依據,多是根據經驗累積的規則。

另外還有一些方法裏面引用了一些正則匹配來進行打分或者替換,其定義以下:

REGEXES = {
    'unlikelyCandidatesRe': re.compile('combx|comment|community|disqus|extra|foot|header|menu|remark|rss|shoutbox|sidebar|sponsor|ad-break|agegate|pagination|pager|popup|tweet|twitter', re.I),
    'okMaybeItsACandidateRe': re.compile('and|article|body|column|main|shadow', re.I),
    'positiveRe': re.compile('article|body|content|entry|hentry|main|page|pagination|post|text|blog|story', re.I),
    'negativeRe': re.compile('combx|comment|com-|contact|foot|footer|footnote|masthead|media|meta|outbrain|promo|related|scroll|shoutbox|sidebar|sponsor|shopping|tags|tool|widget', re.I),
    'divToPElementsRe': re.compile('<(a|blockquote|dl|div|img|ol|p|pre|table|ul)', re.I),
    #'replaceBrsRe': re.compile('(<br[^>]*>[ \n\r\t]*){2,}',re.I),
    #'replaceFontsRe': re.compile('<(\/?)font[^>]*>',re.I),
    #'trimRe': re.compile('^\s+|\s+$/'),
    #'normalizeRe': re.compile('\s{2,}/'),
    #'killBreaksRe': re.compile('(<br\s*\/?>(\s|&nbsp;?)*){1,}/'),
    'videoRe': re.compile('https?:\/\/(www\.)?(youtube|vimeo)\.com', re.I),
    #skipFootnoteLink:      /^\s*(\[?[a-z0-9]{1,2}\]?|^|edit|citation needed)\s*$/i,
}

好比這裏定義了 unlikelyCandidatesRe,就是不像 candidates 的 pattern,好比 foot、comment 等等,碰到這樣的標籤或 pattern 的話,在計算分數的時候都會減分,另外還有其餘的 positiveRe、negativeRe 也是同樣的原理,分別對匹配到的內容進行加分或者減分。

這就是 Readability 的原理,是基於一些規則匹配的打分模型,不少規則其實來源於經驗的累積,分數的計算規則應該也是不斷地調優得出來的。

另外其餘的就沒了,Readability 並無提供提取時間、做者的方法,另外此種方法的準確率也是有限的,但多少仍是省去了一些人工成本。

Newspaper

另外還有一個智能解析的庫,叫作 Newspaper,提供的功能更強一些,可是準確率上我的感受和 Readability 差不太多。

這個庫分爲 Python2 和 Python3 兩個版本,Python2 下的版本叫作 newspaper,Python3 下的版本叫作 newspaper3k,這裏咱們使用 Python3 版原本進行測試。

其 GitHub 地址是:https://github.com/codelucas/newspaper,官方文檔地址是:https://newspaper.readthedocs.io。

在安裝以前須要安裝一些依賴庫,能夠參考官方的說明:https://github.com/codelucas/newspaper#get-it-now。

安裝好必要的依賴庫以後,就可使用 pip 安裝了:

pip3 install newspaper3k

安裝成功以後即可以導入使用了。

下面咱們先用官方提供的實例來過一遍它的用法,官方提供的示例是使用了這個連接:https://fox13now.com/2013/12/30/new-year-new-laws-obamacare-pot-guns-and-drones/,其頁面截圖以下:image.png

官方示例

下面用一個實例來感覺一下:

from newspaper import Article

url = 'https://fox13now.com/2013/12/30/new-year-new-laws-obamacare-pot-guns-and-drones/'
article = Article(url)
article.download()
# print('html:', article.html)

article.parse()
print('authors:', article.authors)
print('date:', article.publish_date)
print('text:', article.text)
print('top image:', article.top_image)
print('movies:', article.movies)

article.nlp()
print('keywords:', article.keywords)
print('summary:', article.summary)

這裏從 newspaper 庫裏面先導入了 Article 這個類,而後直接傳入 url 便可,首先須要調用它的 download 方法,將網頁爬取下來,不然直接進行解析會拋出錯誤的。

但我總感受這個設計挺不友好的,parse 方法不能判斷下,若是沒執行 download 就自動執行 download 方法嗎?若是不 download 其餘的不什麼都幹不了嗎?

好的,而後咱們再執行 parse 方法進行網頁的智能解析,這個功能就比較全了,能解析 authors、publish_date、text 等等,除了正文還能解析做者、發佈時間等等。

另外這個庫還提供了一些 NLP 的方法,好比獲取關鍵詞、獲取文本摘要等等,在使用前須要先執行如下 nlp 方法。

最後運行結果以下:

authors: ['Cnn Wire']
date: 2013-12-30 00:00:00
text: By Leigh Ann Caldwell

WASHINGTON (CNN) — Not everyone subscribes to a New Year’s resolution, but Americans will be required to follow new laws in 2014.

Some 40,000 measures taking effect range from sweeping, national mandates under Obamacare to marijuana legalization in Colorado, drone prohibition in Illinois and transgender protections in California.

Although many new laws are controversial, they made it through legislatures, public referendum or city councils and represent the shifting composition of American beliefs.
...
...
Colorado: Marijuana becomes legal in the state for buyers over 21 at a licensed retail dispensary.

(Sourcing: much of this list was obtained from the National Conference of State Legislatures).
top image: https://localtvkstu.files.wordpress.com/2012/04/national-news-e1486938949489.jpg?quality=85&strip=all
movies: []
keywords: ['drones''national''guns''wage''law''pot''leave''family''states''state''latest''obamacare''minimum''laws']
summary: Oregon: Family leave in Oregon has been expanded to allow eligible employees two weeks of paid leave to handle the death of a family member.
Arkansas: The state becomes the latest state requiring voters show a picture ID at the voting booth.
Minimum wage and former felon employmentWorkers in 13 states and four cities will see increases to the minimum wage.
New Jersey residents voted to raise the state’s minimum wage by $1 to $8.25 per hour.
California is also raising its minimum wage to $9 per hour, but workers must wait until July to see the addition.

這裏省略了一些輸出結果。

能夠看到做者、日期、正文、關鍵詞、標籤、縮略圖等信息都被打印出來了,還算是不錯的。

但這個畢竟是官方的實例,確定是好的,咱們再測試一下剛纔的例子,看看效果如何,網址仍是:https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html,改寫代碼以下:

from newspaper import Article

url = 'https://tech.163.com/19/0909/08/EOKA3CFB00097U7S.html'
article = Article(url, language='zh')
article.download()
# print('html:', article.html)

article.parse()
print('authors:', article.authors)
print('title:', article.title)
print('date:', article.publish_date)
print('text:', article.text)
print('top image:', article.top_image)
print('movies:', article.movies)

article.nlp()
print('keywords:', article.keywords)
print('summary:', article.summary)

這裏咱們將連接換成了新聞的連接,另外在 Article 初始化的時候還加了一個參數 language,其值爲 zh,表明中文。

而後咱們看下運行結果:

Building prefix dict from /usr/local/lib/python3.7/site-packages/jieba/dict.txt ...
Dumping model to file cache /var/folders/1g/l2xlw12x6rncs2p9kh5swpmw0000gn/T/jieba.cache
Loading model cost 1.7178938388824463 seconds.
Prefix dict has been built succesfully.
authors: []
title: 今年iPhone只有小改進?分析師:還有其餘亮點
date2019-09-09 08:10:26+08:00
text: (原標題:Apple Bets More Cameras Can Keep iPhone Humming)

圖示:蘋果首席執行官蒂姆·庫克(Tim Cook)在6月份舉行的蘋果全球開發者大會上。

網易科技訊 99日消息,據國外媒體報道,和過去的12個年頭同樣,新款iPhone將成爲蘋果公司本週所舉行年度宣傳活動的主角。但人們的注意力正轉向須要推進增加的其餘蘋果產品和服務。
...
...
Strategy Analytics的尼爾·莫斯頓(Neil Mawston)表示,可穿戴設備和服務的結合將是蘋果業務超越iPhone的關鍵。他說,上一家手機巨頭諾基亞公司在試圖進行相似業務轉型時就陷入了困境之中。(辰辰)

相關報道:

iPhone 11背部蘋果Logo改成居中:爲反向無線充電

2019年新iPhone傳言彙總,你以爲哪些能成真
top image: https://www.163.com/favicon.ico
movies: []
keywords: ['trust高級投資組合經理丹摩根dan''iphone''mawston表示可穿戴設備和服務的結合將是蘋果業務超越iphone的關鍵他說上一家手機巨頭諾基亞公司在試圖進行相似業務轉型時就陷入了困境之中辰辰相關報道iphone''xs的銷售疲軟情況迫使蘋果在1月份下調了業績預期這是逾15年來的第一次據貿易公司susquehanna''xs機型發佈後那種使人失望的業績重演iphone''今年iphone只有小改進分析師還有其餘亮點''more''xr和iphone''morgan說他們如今沒有任何真正深刻的進展只是想繼續讓iphone這款業務繼續轉下去他樂觀地認爲今年發佈的新款手機將有足夠多的新功能爲一個很是成熟的產品增長額外的功能讓火車繼續前進這種僅限於此的態度說明了蘋果自2007年發佈首款iphone以來所面臨的挑戰iphone銷售佔蘋果公司總營收的一半以上這讓蘋果陷入了一個尷尬的境地既要維持核心產品的銷量另外一方面又須要減小對它的依賴瑞銀ubs今年5月份對8000名智能手機用戶進行了相關調查其發佈的年度全球調查報告顯示最近iphone在人臉識別技術等方面的進步並無引發一些消費者的共鳴他們基本上都認爲蘋果產品沒有過去幾年那麼獨特或者驚豔品牌也沒有過去幾年那麼有吸引力不少人使用老款手機的時間更長本身認爲也沒有必要升級到平均售價949美圓的新款iphone蘋果須要在明年銷售足夠多的iphone以免像去年9月份iphone''keep''原標題apple']
summary: (原標題:Apple Bets More Cameras Can Keep iPhone Humming)圖示:蘋果首席執行官蒂姆·庫克(Tim Cook)在6月份舉行的蘋果全球開發者大會上。網易科技訊 99日消息,據國外媒體報道,和過去的12個年頭同樣,新款iPhone將成爲蘋果公司本週所舉行...亞公司在試圖進行相似業務轉型時就陷入了困境之中。(辰辰)相關報道:iPhone 11背部蘋果Logo改成居中:爲反向無線充電2019年新iPhone傳言彙總,你以爲哪些能成真

中間正文很長省略了一部分,能夠看到運行時首先加載了一些中文的庫包,好比 jieba 所依賴的詞表等等。

解析結果中,日期的確是解析對了,由於這個日期格式的的確比較規整,但這裏還自動給咱們加了東八區的時區,貼心了。做者沒有提取出來,多是沒匹配到 來源 兩個字吧,或者詞庫裏面沒有,標題、正文的提取還算比較正確,也或許這個案例的確是比較簡單。

另外對於 NLP 部分,獲取的關鍵詞比較迷,長度有點太長了。summary 也有點冗餘。

另外 Newspaper 還提供了一個較爲強大的功能,就是 build 構建信息源。官方的介紹其功能就是構建一個新聞源,能夠根據傳入的 URL 來提取相關文章、分類、RSS 訂閱信息等等。

咱們用實例感覺一下:

import newspaper

source = newspaper.build('http://www.sina.com.cn/', language='zh')
for category in source.category_urls():
    print(category)

for article in source.articles:
    print(article.url)
    print(article.title)

for feed_url in source.feed_urls():
    print(feed_url)

在這裏咱們傳入了新浪的官網,調用了 build 方法,構建了一個 source,而後輸出了相關的分類、文章、RSS 訂閱等內容,運行結果以下:

http://cul.news.sina.com.cn
http://www.sina.com.cn/
http://sc.sina.com.cn
http://jiangsu.sina.com.cn
http://gif.sina.com.cn
....
http://tj.sina.com.cn
http://travel.sina.com.cn
http://jiaoyi.sina.com.cn
http://cul.sina.com.cn
https://finance.sina.com.cn/roll/2019-06-12/doc-ihvhiqay5022316.shtml 
經參頭版:激發微觀主體活力加速國企改革
http://eladies.sina.com.cn/feel/xinli/2018-01-25/0722/doc-ifyqwiqk0463751.shtml 
咱們別再聯繫了
http://finance.sina.com.cn/roll/2018-05-13/doc-ihamfahx2958233.shtml 
新違約時代到來!違約「常態化」下的市場出清與換血
http://sports.sina.com.cn/basketball/2019worldcup/2019-09-08/doc-iicezzrq4390554.shtml 
羅健兒26分韓國收首勝
...
http://travel.sina.com.cn/outbound/pages/2019-09-05/detail-iicezzrq3622449.shtml 
菲律賓海濱大道 夜晚讓人迷離
http://travel.sina.com.cn/outbound/pages/2016-08-19/detail-ifxvcnrv0334779.shtml  
關島 用雙腳盡情享受陽光與海灘
http://travel.sina.com.cn/domestic/pages/2019-09-04/detail-iicezzrq3325092.shtml 
秋行查幹浩特草原
http://travel.sina.com.cn/outbound/pages/2019-09-03/detail-iicezueu3050710.shtml 
白羊座的土豪之城迪拜
http://travel.sina.com.cn/video/baidang/2019-08-29/detail-ihytcitn2747327.shtml 
肯辛頓宮藏着維多利亞的祕密
http://cd.auto.sina.com.cn/bdcs/2017-08-15/detail-ifyixias1051586.shtml 

能夠看到它輸出了很是多的類別連接,另外還有不少文章列表,因爲沒有 RSS 訂閱內容,這裏沒有顯示。

下面把站點換成個人博客:https://cuiqingcai.com,博客截圖以下:

圖片

博客截圖

看看運行結果:

https://cuiqingcai.com
https://cuiqingcai.com

彷佛不太行啊,一篇文章都沒有,RSS 也沒有,可見其功能還有待優化。

Newspaper 的基本用法介紹到這裏,更加詳細的用法能夠參考官方文檔:https://newspaper.readthedocs.io。我的感受其中的智能解析能夠用用,不過據個人我的經驗,感受仍是不少解析不對或者解析不全的,

以上即是 Readability 和 Newspaper 的介紹。

其餘方案

另外除了這兩個庫其實還有一些比較優秀的算法,因爲咱們處理的大多爲中文文檔,因此一些在中文上面的研究是比較有效的,在這裏列幾個值得借鑑的中文論文供你們參考:

  • 洪鴻輝等,基於文本及符號密度的網頁正文提取方法

  • 梁東等,基於支持向量機的網頁正文內容提取方法

  • 王衛紅等,基於可視塊的多記錄型複雜網頁信息提取算法

相關文章
相關標籤/搜索