Web 數據挖掘涉及數據處理中的大量設計決策和轉折點。根據數據收集的目的,可能還需要大量過濾和質量評估。雖然可以預期一些大規模算法會消除不規則性,但需要低誤差幅度和仔細閱讀方法的使用(例如在詞典研究中搜索示例)意味着在構建和處理方面不斷改進和改進數據集。
區分整個頁面和正文內容可以幫助緩解許多與網頁文本相關的質量問題:如果正文太短或多余,可能沒有必要使用它。雖然它對於消除 Web 文檔的重復很有用,但與內容提取相關的其他任務也受益於更清晰的文本庫,因為它使處理“真實”內容成為可能。在語言和詞典研究的具體情況下,它允許對文檔中真正重要的唯一部分進行內容檢查(例如語言檢測)。
網頁內容提取的挑戰
由於文本語料庫、文本類型和用例的種類越來越多,針對給定的研究目標評估某些網絡數據的充分性和質量變得越來越困難。語料庫構建中的核心操作包括保留所需內容而丟棄其余內容,該任務有許多名稱指的是特殊子任務或整體:網頁抓取、樣板移除或樣板檢測、網頁模板檢測、網頁清理、或網絡內容提取——有關最近的概述,請參閱Lejeune & Zhu (2018)。
最近,使用CommonCrawl 的方法蓬勃發展,因為它們允許通過跳過(或更准確地說是外包)爬行階段來加快下載和處理速度。雖然我認為通過 Web 找到自己的“自己的”方式與某些使用場景非常相關,但很明顯,在沒有過濾的情況下不應使用CommonCrawl數據,它也可以從更精細的元數據中受益。
我已經寫過關於使用 Python 模塊htmldate在HTML頁面中提取日期的正在進行的工作,現在我將介紹我的處理鏈的第二個組件:trafilatura,一個用於文本提取的 Python 庫。它側重於主要內容,通常是中心顯示的部分,沒有左右欄、頁眉或頁腳,但包括潛在的標題和評論。
介紹使用 Trafilatura 進行文本抓取
Trafilatura是一個 Python 庫,旨在下載、解析和抓取網頁數據。它還提供了可以輕松幫助網站導航和從站點地圖和提要中提取鏈接的工具。
其主要目的是查找網頁的相關和原始文本部分,並去除由重復元素(頁眉和頁腳、廣告、鏈接/博客等)組成的噪音。它必須足夠精確,不會遺漏文本或丟棄有效文檔,它還必須相當快,因為預計它會在生產中運行數百萬頁。
Trafilatura 在保留一些結構的同時抓取網頁的主要文本,這項任務也稱為樣板移除、基於DOM的內容提取、主要內容識別或HTML文本清理。處理結果可以是TXT、CSV、JSON 和 XML格式。在后一種情況下,將保留基本格式元素,例如文本格式(粗體、斜體等)和頁面結構(段落、標題、列表、鏈接、圖像等),然后可將其用於進一步處理。
該庫主要面向語言分析,但可以用於許多不同的目的。從語言的角度來看,尤其是與“前網絡”和通用語料庫相比,網絡語料庫構建的挑戰在於提取和預處理生成的網絡文本的能力,並最終使它們在可清晰描述和連貫的集合中可用.
因此 trafilatura 具有注釋提取(與其余部分分開)、使用最近最少使用 ( LRU ) 緩存在句子、段落和文檔級別進行重復檢測、與文本編碼倡議 ( XML TEI )建議兼容的XML輸出以及語言對提取的內容進行檢測。
該庫適用於所有常見版本的 Python,可以按如下方式安裝:
$ pip install trafilatura # pip3(如果適用)
與 Python 一起使用
該庫包含一系列 Python 函數,可以輕松重用並適應各種開發設置:
>>> 導入 trafilatura >>> 下載 = trafilatura 。fetch_url ( 'https://github.blog/2019-03-29-leader-spotlight-erin-spiceland/' ) >>> trafilatura 。extract ( downloaded ) # 將主要內容和評論輸出為純文本... >>> trafilatura . extract ( downloaded , xml_output = True , include_comments = False ) # 輸出沒有注釋的主要內容為 XML ...
這些值組合起來可能提供最快的執行時間,但不一定包括所有可用的文本段:
>>> 結果 = 提取(已下載, include_comments = False , include_tables = False , no_fallback = True )
輸入可以由先前解析的樹(即 lxml.html 對象)組成,然后無縫處理:
>>> 從 lxml 導入 html >>> mytree = html 。fromstring ( '<html><body><article><p>這是正文。它必須足夠長才能繞過安全檢查。Lorem ipsum dolor sat amet, consectetur adipiscing elit, sed do eiusmod tempor incidundunt ut Labore et dolore magna aliqua。</p></article></body></html>' ) >>> extract ( mytree ) '這是正文。它必須足夠長才能繞過安全檢查。Lorem ipsum dolor sat amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut Labore et dolore magna aliqua。
該函數bare_extraction
可用於繞過轉換並直接使用和轉換原始輸出:它返回元數據(作為字典)以及正文和注釋(均作為LXML 對象)的Python 變量。
>>> 從 trafilatura 導入 裸提取 >>> 裸提取(已下載)
在命令行上的使用
Trafilatura 包含一個命令行界面,無需編寫代碼即可方便地使用。
$ trafilatura -u "https://www.scientificamerican.com/article/statistically-speaking-elephants-by-the-numbers/"
'帖子更新於 2013 年 8 月 13 日,上午 11:18 這是世界大象日。(誰知道?!)這里有一個關於我們稱為大象的長鼻類動物正在進行的傳奇的清醒更新。...' $ trafilatura -h # 顯示所有可用選項
以下參數組合允許批量下載(包含的 URL links.txt
)、在單獨目錄中備份HTML源、轉換和將提取的文本存儲為XML。這對於存檔和進一步處理特別有用:
$ trafilatura --inputfile links.txt --outputdir 轉換/ --backup-dir html-sources/ --xml
潛在的替代品
盡管沒有積極維護一些相應的 Python 包,但以下用於 Web 文本提取的替代方案包括:
- 保持文本結構完整但不關注正文的圖書館
- 專注於主要文本提取的庫
- 提取正文同時提取文檔元數據的庫
Trafilatura 具有許多有用的功能,例如元數據、文本和評論提取以及提要和站點地圖中的鏈接發現。僅在文本提取方面,它的表現已經明顯優於可用的替代方案,請參閱以下抓取質量比較:
- 文檔的評估頁
- ScrapingHub 的文章提取基准
- Bien choisir son outil d'extraction de contenu à partir du Web,(Lejeune和Barbaresi,TALN會議論文集,第 4 卷:系統演示,2020 年)。
另一個問題可能在於缺乏與文檔存儲和處理的常見需求相對應的輸出格式:該庫可以將結果轉換為CSV、JSON、XML 和 XML TEI。
Ref: https://adrien.barbaresi.eu/blog/trafilatura-main-text-content-python.html