2018-08-21

爬蟲簡(jiǎn)介

什么是爬蟲?

是一種按照一定的規(guī)則箫柳,自動(dòng)地抓取互聯(lián)網(wǎng)信息的程序或者腳本手形。

所謂網(wǎng)頁(yè)抓取,就是把URL地址中指定的網(wǎng)絡(luò)資源從網(wǎng)絡(luò)流中讀取出來(lái)悯恍,保存到本地库糠。 在

Python中有很多庫(kù)可以用來(lái)抓取網(wǎng)頁(yè)

分類

通用爬蟲(General Purpose Web Crawler)、 聚焦爬蟲(Focused Web Crawler)、增量

式爬蟲(Incremental Web Crawler)瞬欧、深層爬蟲(Deep Web Crawler)

通用網(wǎng)絡(luò)爬蟲

捜索引擎抓取系統(tǒng)(Baidu贷屎、Google、Yahoo 等)的重要組成部分艘虎。主要目的是將互聯(lián)

網(wǎng)上的網(wǎng)頁(yè)下載到本地唉侄,形成一個(gè)互聯(lián)網(wǎng)內(nèi)容的鏡像備份。

聚焦爬蟲

是"面向特定主題需求"的一種網(wǎng)絡(luò)爬蟲程序野建,它與通用搜索引擎爬蟲的區(qū)別在于: 聚焦

爬蟲在實(shí)施網(wǎng)頁(yè)抓取時(shí)會(huì)對(duì)內(nèi)容進(jìn)行處理篩選属划,盡量保證只抓取與需求相關(guān)的網(wǎng)頁(yè)信息。

增量式抓取

是指在具有一定量規(guī)模的網(wǎng)絡(luò)頁(yè)面集合的基礎(chǔ)上候生,采用更新數(shù)據(jù)的方式選取已有集合中的過(guò)

時(shí)網(wǎng)頁(yè)進(jìn)行抓取同眯,以保證所抓取到的數(shù)據(jù)與真實(shí)網(wǎng)絡(luò)數(shù)據(jù)足夠接近。進(jìn)行增量式抓取的前提

是唯鸭,系統(tǒng)已經(jīng)抓取了足夠數(shù)量的網(wǎng)絡(luò)頁(yè)面须蜗,并具有這些頁(yè)面被抓取的時(shí)間信息。

深度爬蟲

針對(duì)起始url地址進(jìn)行數(shù)據(jù)采集肿孵,在響應(yīng)數(shù)據(jù)中進(jìn)行數(shù)據(jù)篩選得到需要進(jìn)行數(shù)據(jù)采集的下一

波url地址唠粥,并將url地址添加到數(shù)據(jù)采集隊(duì)列中進(jìn)行二次爬取..以此類推疏魏,一致到所有頁(yè)面

的數(shù)據(jù)全部采集完成即可完成深度數(shù)據(jù)采集停做,這里的深度指的就是url地址的檢索深度。

爬蟲步驟

網(wǎng)頁(yè)抓取大莫,數(shù)據(jù)提取蛉腌,數(shù)據(jù)存儲(chǔ)

HTTP協(xié)議

HTTP,HyperText Transfer Protocol只厘,是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議烙丛。

是一個(gè)基于TCP/IP通信協(xié)議來(lái)傳遞數(shù)據(jù),一個(gè)屬于應(yīng)用層的協(xié)議

瀏覽器作為HTTP客戶端通過(guò)URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請(qǐng)求羔味。Web服

務(wù)器根據(jù)接收到的請(qǐng)求后河咽,向客戶端發(fā)送響應(yīng)信息。

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)HTTP的安全版赋元,在

HTTP下加入SSL層忘蟹。

SSL(Secure Sockets Layer 安全套接層)主要用于Web的安全傳輸協(xié)議,在傳輸層對(duì)網(wǎng)

絡(luò)連接進(jìn)行加密搁凸,保障在Internet上數(shù)據(jù)傳輸?shù)陌踩?/p>

? HTTP 的端口號(hào)為 80媚值,

? HTTPS 的端口號(hào)為 443

urlib的使用

在Python3.x中,我們可以使用urlib這個(gè)組件抓取網(wǎng)頁(yè)护糖,urllib是一個(gè)URL處理包褥芒,這個(gè)

包中集合了一些處理URL的模塊

1.urllib.request模塊是用來(lái)打開和讀取URLs的;

2.urllib.error模塊包含一些有urllib.request產(chǎn)生的錯(cuò)誤嫡良,可以使用try進(jìn)行捕捉處理锰扶;

3.urllib.parse模塊包含了一些解析URLs的方法献酗;

4.urllib.robotparser模塊用來(lái)解析robots.txt文本文件.它提供了一個(gè)單獨(dú)的RobotFileP

arser類,通過(guò)該類提供的can_fetch()方法測(cè)試爬蟲是否可以下載一個(gè)頁(yè)面少辣。

urllib.request.urlopen()

這個(gè)接口函數(shù)就可以很輕松的打開一個(gè)網(wǎng)站凌摄,讀取并打印信息。

from urllib import request

if __name__ == "__main__":

? ? response = request.urlopen("http://fanyi.baidu.com")

? ? html = response.read()

print(html)

說(shuō)明

request.urlopen()打開和讀取URLs信息漓帅,返回對(duì)象response

可以調(diào)用read()锨亏,進(jìn)行讀取。

print()忙干,將讀到的信息打印出來(lái)器予。

其實(shí)這就是瀏覽器接收到的信息,只不過(guò)我們?cè)谑褂脼g覽器的時(shí)候捐迫,瀏覽器已經(jīng)將這些信息

轉(zhuǎn)化成了界面信息供我們?yōu)g覽乾翔。

網(wǎng)頁(yè)編碼

雖然我們已經(jīng)成功獲取了信息,但是顯然他們都是二進(jìn)制的亂碼

可以通過(guò)簡(jiǎn)單的decode()命令將網(wǎng)頁(yè)的信息進(jìn)行解碼

from urllib import request

if __name__ == "__main__":

? ? response = request.urlopen("http://fanyi.baidu.com/")

? ? html = response.read()

? ? html = html.decode("utf-8")

print(html)

自動(dòng)獲取網(wǎng)頁(yè)編碼

chardet

第三方庫(kù)施戴,用來(lái)判斷編碼的模塊

使用chardet.detect()方法反浓,判斷網(wǎng)頁(yè)的編碼方式

安裝方法:

pip install chardet

代碼:

from urllib import request

import chardet

if __name__ == "__main__":

? ? response = request.urlopen("http://fanyi.baidu.com/")

? ? html = response.read()

? ? charset = chardet.detect(html)

? ? print(charset)

Request對(duì)象

反爬蟲機(jī)制:

1、 封殺爬蟲程序

2赞哗、 封殺指定IP

3雷则、 封殺非人操作的程序

如果需要執(zhí)行更復(fù)雜的操作,比如增加 HTTP 報(bào)頭肪笋,必須創(chuàng)建一個(gè) Request 實(shí)例來(lái)作為

urlopen()的參數(shù)月劈;而需要訪問(wèn)的 url 地址則作為 Request 實(shí)例的參數(shù)。

from urllib import request

if __name__ == "__main__":? ? ?

req = request.Request("http://fanyi.baidu.com/")? ??

?response = request.urlopen(req)

html = response.read() html = html.decode("utf-8") print(html)

User Agent

瀏覽器就是互聯(lián)網(wǎng)世界上公認(rèn)被允許的身份藤乙,如果我們希望我們的爬蟲程序更像一個(gè)真

實(shí)用戶猜揪,那我們第一步,就是需要偽裝成一個(gè)被公認(rèn)的瀏覽器坛梁。用不同的瀏覽器在發(fā)送

請(qǐng)求的時(shí)候而姐,會(huì)有不同的 User-Agent 頭。中文名為用戶代理划咐,簡(jiǎn)稱UA

User Agent存放于Headers中

服務(wù)器就是通過(guò)查看Headers中的User Agent來(lái)判斷是誰(shuí)在訪問(wèn)拴念。

urllib中默認(rèn)的User Agent,會(huì)有Python的字樣尖殃,如果服務(wù)器檢查User Agent丈莺,可以拒

絕Python程序訪問(wèn)網(wǎng)站。

常見瀏覽器User-Agent:

https://blog.csdn.net/Kwoky/article/details/80381246

設(shè)置User Agent

方法 1:在創(chuàng)建 Request 對(duì)象的時(shí)候送丰,填入 headers 參數(shù)(包含 User Agent 信息)缔俄,這個(gè)

Headers參數(shù)要求為字典;

方法2:在創(chuàng)建Request對(duì)象的時(shí)候不添加headers參數(shù),在創(chuàng)建完成之后俐载,使用add_h

eader()的方法蟹略,添加headers。

代理分類

代理可以分為三種遏佣,即高度匿名代理挖炬、普通匿名代理和透明代理。

高度匿名代理 隱藏客戶的真實(shí)IP状婶,但是不改變客戶機(jī)的請(qǐng)求意敛,就像有個(gè)真正的客戶瀏覽器

在訪問(wèn)服務(wù)器。

普通匿名代理 能隱藏客戶機(jī)的真實(shí) IP膛虫,會(huì)改變客戶的請(qǐng)求信息草姻,服務(wù)器端不知道你的 ip

地址但有可能認(rèn)為我們使用了代理。

透明代理 不但改變了我們的請(qǐng)求信息稍刀,還會(huì)傳送真實(shí)的IP地址撩独。

爬蟲程序運(yùn)行速度是很快,在網(wǎng)站爬取數(shù)據(jù)時(shí),一個(gè)固定IP的訪問(wèn)頻率就會(huì)很高账月,這不符合

人為操作的標(biāo)準(zhǔn)综膀。所以一些網(wǎng)站會(huì)設(shè)置一個(gè)IP訪問(wèn)頻率的閾值,如果一個(gè)IP訪問(wèn)頻率超過(guò)

這個(gè)閾值局齿,說(shuō)明這個(gè)不是人在訪問(wèn)剧劝,而是一個(gè)爬蟲程序。

解決辦法一:設(shè)置延時(shí)

解決辦法二:使用 IP 代理项炼〉F剑可以設(shè)置一些代理服務(wù)器示绊,每隔一段時(shí)間換一個(gè)代理锭部,就算 IP

被禁止,依然可以換個(gè)IP繼續(xù)爬取面褐。

免費(fèi)短期代理網(wǎng)站舉例:

西刺免費(fèi)代理IP? http://www.xicidaili.com/

快代理免費(fèi)代理? http://www.kuaidaili.com/free/inha/

聚合數(shù)據(jù) https://www.juhe.cn/docs/api/id/62

代理IP選取

西刺網(wǎng)站為例拌禾,選出信號(hào)好的IP

使用代理的步驟:

(1)調(diào)用urlib.request.ProxyHandler(),構(gòu)建處理器對(duì)象展哭,proxies參數(shù)為一個(gè)字典湃窍。

? (2)創(chuàng)建Opener對(duì)象

(3)安裝Opener

使用 install_opener 方法之后,會(huì)將程序默認(rèn)的 urlopen 方法替換掉匪傍。也就是說(shuō)您市,如果使

用install_opener之后,在該文件中役衡,再次調(diào)用urlopen會(huì)使用自己創(chuàng)建好的opener茵休。

代碼:

if __name__ == "__main__":? ??

?#訪問(wèn)網(wǎng)址? ?

?#url = 'http://www.baidu.com/'?

url='http://ip.27399.com/’? ??

?#這是代理 IP? ? proxy = {'http':'113.92.156.185:808'}? ??

#創(chuàng)建 ProxyHandler? ??

?proxy_support = request.ProxyHandler(proxy)? ??

?#創(chuàng)建 Opener? ??

?opener = request.build_opener(proxy_support)? ?

?#添加 User Angent? ??

?opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36')]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子榕莺,更是在濱河造成了極大的恐慌俐芯,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钉鸯,死亡現(xiàn)場(chǎng)離奇詭異吧史,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)唠雕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門贸营,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人岩睁,你說(shuō)我怎么就攤上這事莽使。” “怎么了笙僚?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵芳肌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我肋层,道長(zhǎng)亿笤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任栋猖,我火速辦了婚禮净薛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒲拉。我一直安慰自己肃拜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布雌团。 她就那樣靜靜地躺著燃领,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锦援。 梳的紋絲不亂的頭發(fā)上猛蔽,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音灵寺,去河邊找鬼曼库。 笑死,一個(gè)胖子當(dāng)著我的面吹牛略板,可吹牛的內(nèi)容都是我干的毁枯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼叮称,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼种玛!你這毒婦竟也來(lái)了胀糜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蒂誉,失蹤者是張志新(化名)和其女友劉穎教藻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體右锨,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡括堤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绍移。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悄窃。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蹂窖,靈堂內(nèi)的尸體忽然破棺而出轧抗,到底是詐尸還是另有隱情,我是刑警寧澤瞬测,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布横媚,位于F島的核電站,受9級(jí)特大地震影響月趟,放射性物質(zhì)發(fā)生泄漏灯蝴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一孝宗、第九天 我趴在偏房一處隱蔽的房頂上張望穷躁。 院中可真熱鬧,春花似錦因妇、人聲如沸问潭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)狡忙。三九已至,卻和暖如春摔寨,著一層夾襖步出監(jiān)牢的瞬間去枷,已是汗流浹背怖辆。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工是复, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竖螃。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓淑廊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親特咆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子季惩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容