日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python 爬蟲“學(xué)前班”!學(xué)會免踩坑!

系統(tǒng) 1781 0

640?wx_fmt=gif

Python 爬蟲“學(xué)前班”!學(xué)會免踩坑!_第1張圖片

作者 | 喵叔

責(zé)編 | 胡巍巍

出品 | CSDN(ID:CSDNnews)

爬蟲應(yīng)用的廣泛,例如搜索引擎、采集數(shù)據(jù)、廣告過濾、數(shù)據(jù)分析等。當(dāng)我們對少數(shù)網(wǎng)站內(nèi)容進(jìn)行爬取時寫多個爬蟲還是有可能的,但是對于需要爬取多個網(wǎng)站內(nèi)容的項目來說是不可能編寫多個爬蟲的,這個時候我們就需要智能爬蟲。

智能爬蟲目前有三種:

1. 基于網(wǎng)頁內(nèi)容的爬蟲

當(dāng)網(wǎng)頁含有大量需要提取的信息時,我們就需要用到基于網(wǎng)頁內(nèi)容的爬蟲。該爬蟲會將 HTML 視為文本并利用 NLP 技術(shù)進(jìn)行處理。

雖然說這種基于網(wǎng)頁內(nèi)容的爬蟲可以減少爬蟲的數(shù)量,但是需要人工參與進(jìn)行訓(xùn)練 NLP 模型,沒有 AI 開發(fā)經(jīng)驗或 AI 開發(fā)經(jīng)驗很少的程序員很難寫出這類爬蟲,并且爬蟲爬取時間很長效率還很低。

2. 基于DOM結(jié)構(gòu)的爬蟲

基于DOM結(jié)構(gòu)的爬蟲相對來說比較簡單,就是將 HTML 解析為 DOM 樹,然后根據(jù)語法結(jié)構(gòu)進(jìn)行提取信息,這種方法效率和準(zhǔn)確性都比前一種方法高。

3. 基于視覺的爬蟲

基于視覺的爬蟲的開發(fā)難度同樣很高,它是通過瀏覽器接口或者瀏覽器內(nèi)核對目標(biāo)頁面進(jìn)行袁燃,然后基于網(wǎng)頁的視覺規(guī)律提取網(wǎng)頁數(shù)據(jù)。這種爬蟲需要利用神經(jīng)網(wǎng)絡(luò)中的 CNN 卷積神經(jīng)網(wǎng)絡(luò)獲取頁面特定區(qū)域的內(nèi)容。

目前比較常用的只能爬蟲框架是 Readability 和 Newspaper 。下面我們就來看一下這兩個框架的講解。

?

640?wx_fmt=png

Newspaper

?

Newspaper 是一個利用 NLP 的智能爬蟲框架,可以從頁面中提取出很多內(nèi)容。安裝這個爬蟲框架需要首先安裝依賴:

            
              shell

sudo?apt-get?install?libxml2-dev?libxslt-dev

sudo?apt-get?install?libjpeg-dev?zlib1g-dev?libpng12-dev

            
          

在上述安裝中如果出現(xiàn) libpng12-dev 出現(xiàn)錯誤,就需要安裝 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('標(biāo)題',?article.title)

print('發(fā)布日期',?article.publish_date)

print('正文',?article.text)

article.nlp()

print('關(guān)鍵詞',?article.keywords)

print('摘要',?article.summary)

            
          

上述代碼中 language='zh' 告訴 newspaper 我們抓取的是中文網(wǎng)頁。newspaper 會首先下載頁面,然后利用 parse 方法解析頁面。頁面解析后就可以獲取到作者、標(biāo)題、發(fā)布日期等內(nèi)容,如果要提取關(guān)鍵字和摘要,就可以使用 nlp 方法。

我利用多個不同網(wǎng)站的 URL 進(jìn)行測試發(fā)現(xiàn),部分內(nèi)容的作者和發(fā)布日期會解析不出來,有些內(nèi)容甚至獲取的不正確,但是對于英文內(nèi)容還是識別率很高的。如果要提高對中文的識別率,可以更換 newspaper 中的使用的分詞庫(目前 newspaper 使用的分詞庫是結(jié)巴分詞),或者改變所使用的內(nèi)容識別模型。

?

640?wx_fmt=png

Readability

?

Readability 是一個爬蟲算法,它在 python 中的名稱叫 readability-lxml 同樣我們也可以通過 pip 命令來安裝:

            
              shell

pip?install?readability-lxml

            
          

安裝完之后我們只需導(dǎo)入 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 內(nèi)容傳遞給 readability 中的 Document 類,接著我們調(diào)用了 title 和 summary 方法來獲取標(biāo)題和正文。這樣我們就獲取到了標(biāo)題和正文。?

summary 方法中的 html_partial 意思是石否過濾掉返回結(jié)果中的 html 和 body 標(biāo)簽。readability 所返回的正文內(nèi)容會有很大的可能包含頁面 html 元素,這就需要我們進(jìn)行二次過濾或提取。

readability 獲取 title 的方法很簡單,就是直接獲取頁面 title 元素中的內(nèi)容,但是獲取正文的方法就麻煩了,它是給每個節(jié)點打分,比如遇到 article 元素就會加上 5 分(源碼中就是加上 5 分),因為 article 元素有可能是正文內(nèi)容或正文內(nèi)容的一部分。

如果遇到 ol 元素就意味著它有可能不是正文內(nèi)容,因此減掉3分,最后得分最高的那個元素就很有可能是正文或者正文內(nèi)容。

當(dāng)然 readability 還存在利用正則表達(dá)式來進(jìn)行打分的方式,這種方式的效果和上一種方式的效果幾乎一樣。簡單點說 readability 的原理就是根據(jù)經(jīng)驗積累設(shè)置出的模型,分?jǐn)?shù)也是根據(jù)敬仰不斷優(yōu)化得到的結(jié)果,因此這個框架的準(zhǔn)確的不是很高,但是可以解放一些人手。

?

640?wx_fmt=png

總結(jié)和風(fēng)險預(yù)防

?

我們講解了常見的三種智能爬蟲類型,還通過代碼的形式學(xué)習(xí)了 newspaper 和 readability 的使用方法和原理,我們可以利用這篇文章學(xué)到的內(nèi)容來編寫自己的爬蟲,同時對爬蟲的開發(fā)有了更進(jìn)一步的了解。

爬蟲目前處于法律的灰色地帶,用好了會給個人/公司帶來很大的收益,反之會給個人/公司帶來法律風(fēng)險。因此我們在使用爬蟲的時候必須要遵循目標(biāo)網(wǎng)站 robots.txt 文件中的規(guī)定,同時也要控制爬蟲對目標(biāo)網(wǎng)站的爬取速度和頻率,防止對目標(biāo)網(wǎng)站造成壓力,甚至破壞數(shù)據(jù)信息。

作者簡介:朱鋼,筆名喵叔,CSDN博客專家,.NET高級開發(fā)工程師,7年一線開發(fā)經(jīng)驗,參與過電子政務(wù)系統(tǒng)和AI客服系統(tǒng)的開發(fā),以及互聯(lián)網(wǎng)招聘網(wǎng)站的架構(gòu)設(shè)計,目前就職于北京恒創(chuàng)融慧科技發(fā)展有限公司,從事企業(yè)級安全監(jiān)控系統(tǒng)的開發(fā)。

【END】

Python學(xué)習(xí),怎么入門?

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

Python 爬蟲“學(xué)前班”!學(xué)會免踩坑!_第2張圖片

?熱 文 ?推 薦?

?

?

?

?

?

?

?

?dfuse、慢霧科技、MYKEY共同出席,與你探討區(qū)塊鏈數(shù)據(jù)架構(gòu)和項目上鏈那些事!

?

Python 爬蟲“學(xué)前班”!學(xué)會免踩坑!_第3張圖片 點擊閱讀原文,輸入關(guān)鍵詞,即可搜索您想要的 CSDN 文章。

640?wx_fmt=png

你點的每個“在看”,我都認(rèn)真當(dāng)成了喜歡

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 鹿邑县| 渭南市| 郯城县| 祁连县| 扎囊县| 左云县| 集贤县| 新巴尔虎右旗| 调兵山市| 吉木萨尔县| 乐亭县| 河北区| 蓝山县| 堆龙德庆县| 米易县| 轮台县| 汶上县| 保亭| 亳州市| 甘孜县| 义乌市| 当阳市| 白河县| 行唐县| 东海县| 鄢陵县| 华安县| 阿鲁科尔沁旗| 菏泽市| 山东省| 大连市| 拜城县| 绵阳市| 临朐县| 泊头市| 盐源县| 九台市| 高州市| 高淳县| 青铜峡市| 宜州市|