作者 | 喵叔
責編 | 胡巍巍
出品 | CSDN(ID:CSDNnews)
爬蟲應用的廣泛,例如搜索引擎、采集數據、廣告過濾、數據分析等。當我們對少數網站內容進行爬取時寫多個爬蟲還是有可能的,但是對于需要爬取多個網站內容的項目來說是不可能編寫多個爬蟲的,這個時候我們就需要智能爬蟲。
智能爬蟲目前有三種:
1. 基于網頁內容的爬蟲
當網頁含有大量需要提取的信息時,我們就需要用到基于網頁內容的爬蟲。該爬蟲會將 HTML 視為文本并利用 NLP 技術進行處理。
雖然說這種基于網頁內容的爬蟲可以減少爬蟲的數量,但是需要人工參與進行訓練 NLP 模型,沒有 AI 開發經驗或 AI 開發經驗很少的程序員很難寫出這類爬蟲,并且爬蟲爬取時間很長效率還很低。
2. 基于DOM結構的爬蟲
基于DOM結構的爬蟲相對來說比較簡單,就是將 HTML 解析為 DOM 樹,然后根據語法結構進行提取信息,這種方法效率和準確性都比前一種方法高。
3. 基于視覺的爬蟲
基于視覺的爬蟲的開發難度同樣很高,它是通過瀏覽器接口或者瀏覽器內核對目標頁面進行袁燃,然后基于網頁的視覺規律提取網頁數據。這種爬蟲需要利用神經網絡中的 CNN 卷積神經網絡獲取頁面特定區域的內容。
目前比較常用的只能爬蟲框架是 Readability 和 Newspaper 。下面我們就來看一下這兩個框架的講解。
?
Newspaper
?
Newspaper 是一個利用 NLP 的智能爬蟲框架,可以從頁面中提取出很多內容。安裝這個爬蟲框架需要首先安裝依賴:
shell
sudo?apt-get?install?libxml2-dev?libxslt-dev
sudo?apt-get?install?libjpeg-dev?zlib1g-dev?libpng12-dev
在上述安裝中如果出現 libpng12-dev 出現錯誤,就需要安裝 libpng-dev 。
接下來就需要安裝 NLP 語料庫:
shell
curl?https://raw.githubusercontent.com/codelucas/newspaper/master/download_corpora.py?|?python3
最后我們安裝 Newspaper 爬蟲框架:
shell
pip?install?newspaper3k
下面我們就通過一個例子來看一下 newspaper 框架怎么使用:
python
from?newspaper?import?Article
url?=?'https://www.ithome.com/0/445/071.htm'
article?=?Article(url,?language='zh')
article.download()
article.parse()
print('作者',?article.authors)
print('標題',?article.title)
print('發布日期',?article.publish_date)
print('正文',?article.text)
article.nlp()
print('關鍵詞',?article.keywords)
print('摘要',?article.summary)
上述代碼中 language='zh' 告訴 newspaper 我們抓取的是中文網頁。newspaper 會首先下載頁面,然后利用 parse 方法解析頁面。頁面解析后就可以獲取到作者、標題、發布日期等內容,如果要提取關鍵字和摘要,就可以使用 nlp 方法。
我利用多個不同網站的 URL 進行測試發現,部分內容的作者和發布日期會解析不出來,有些內容甚至獲取的不正確,但是對于英文內容還是識別率很高的。如果要提高對中文的識別率,可以更換 newspaper 中的使用的分詞庫(目前 newspaper 使用的分詞庫是結巴分詞),或者改變所使用的內容識別模型。
?
Readability
?
Readability 是一個爬蟲算法,它在 python 中的名稱叫 readability-lxml 同樣我們也可以通過 pip 命令來安裝:
shell
pip?install?readability-lxml
安裝完之后我們只需導入 readability 即可,我們來看一下例子:
python
import?requests
from?readability?import?Document
url?=?"https://www.ithome.com/0/444/503.htm"
html?=?requests.get(url).content
doc?=?Document(html)
print("title:",?doc.title())
print("content:",?doc.summary(html_partial=True))
這里我們使用 requests 庫請求頁面,然后將獲取到的 html 內容傳遞給 readability 中的 Document 類,接著我們調用了 title 和 summary 方法來獲取標題和正文。這樣我們就獲取到了標題和正文。?
summary 方法中的 html_partial 意思是石否過濾掉返回結果中的 html 和 body 標簽。readability 所返回的正文內容會有很大的可能包含頁面 html 元素,這就需要我們進行二次過濾或提取。
readability 獲取 title 的方法很簡單,就是直接獲取頁面 title 元素中的內容,但是獲取正文的方法就麻煩了,它是給每個節點打分,比如遇到 article 元素就會加上 5 分(源碼中就是加上 5 分),因為 article 元素有可能是正文內容或正文內容的一部分。
如果遇到 ol 元素就意味著它有可能不是正文內容,因此減掉3分,最后得分最高的那個元素就很有可能是正文或者正文內容。
當然 readability 還存在利用正則表達式來進行打分的方式,這種方式的效果和上一種方式的效果幾乎一樣。簡單點說 readability 的原理就是根據經驗積累設置出的模型,分數也是根據敬仰不斷優化得到的結果,因此這個框架的準確的不是很高,但是可以解放一些人手。
?
總結和風險預防
?
我們講解了常見的三種智能爬蟲類型,還通過代碼的形式學習了 newspaper 和 readability 的使用方法和原理,我們可以利用這篇文章學到的內容來編寫自己的爬蟲,同時對爬蟲的開發有了更進一步的了解。
爬蟲目前處于法律的灰色地帶,用好了會給個人/公司帶來很大的收益,反之會給個人/公司帶來法律風險。因此我們在使用爬蟲的時候必須要遵循目標網站 robots.txt 文件中的規定,同時也要控制爬蟲對目標網站的爬取速度和頻率,防止對目標網站造成壓力,甚至破壞數據信息。
作者簡介:朱鋼,筆名喵叔,CSDN博客專家,.NET高級開發工程師,7年一線開發經驗,參與過電子政務系統和AI客服系統的開發,以及互聯網招聘網站的架構設計,目前就職于北京恒創融慧科技發展有限公司,從事企業級安全監控系統的開發。
【END】
Python學習,怎么入門?
https://edu.csdn.net/topic/python115?utm_source=csdn_bw
?熱 文 ?推 薦?
?
?
?
?
?
?
?
?dfuse、慢霧科技、MYKEY共同出席,與你探討區塊鏈數據架構和項目上鏈那些事!
?
點擊閱讀原文,輸入關鍵詞,即可搜索您想要的 CSDN 文章。
你點的每個“在看”,我都認真當成了喜歡
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
