爬蟲(chóng)的這些文章就算是我的復(fù)習(xí)吧!今天開(kāi)始0母埂织盼!
什么是爬蟲(chóng)杨何?
老師說(shuō),本質(zhì)上就是利用程序在網(wǎng)上獲得對(duì)我們有價(jià)值的數(shù)據(jù)沥邻。
我個(gè)人理解:
1危虱、“蟲(chóng)”
爬蟲(chóng)就是這些能夠讓我們獲得數(shù)據(jù)的一類(lèi)小程序,就是個(gè)工具唐全。希望能夠掌握好埃跷,做一個(gè)遵守互聯(lián)網(wǎng)倫理道德的蟲(chóng)蟲(chóng)。
2邮利、“網(wǎng)”
對(duì)互聯(lián)網(wǎng)弥雹,html要有認(rèn)識(shí),才能掌握好工具延届。
瀏覽器的工作原理(5步):
在瀏覽器輸入網(wǎng)址(也可以叫URL)---- 瀏覽器向服務(wù)器傳達(dá)了我們想訪問(wèn)某個(gè)網(wǎng)頁(yè)的需求(請(qǐng)求)---- 服務(wù)器把想要的網(wǎng)站數(shù)據(jù)發(fā)送給瀏覽器(響應(yīng))---- 瀏覽器會(huì)把這些用計(jì)算機(jī)語(yǔ)言寫(xiě)的數(shù)據(jù)翻譯成你能看得懂的樣子(解析數(shù)據(jù))---- 我們?cè)谀玫降臄?shù)據(jù)中挑選出對(duì)我們有用的數(shù)據(jù)(提取數(shù)據(jù))---- 我們(存儲(chǔ)數(shù)據(jù))缅糟。
爬蟲(chóng)可以干什么?
上述人機(jī)互動(dòng)的過(guò)程中祷愉,爬蟲(chóng)可以幫助我們完成絕大部分工作:
1窗宦、爬蟲(chóng)可以模擬瀏覽器去向服務(wù)器發(fā)出請(qǐng)求;
2二鳄、服務(wù)器響應(yīng)后赴涵,爬蟲(chóng)程序還可以代替瀏覽器幫我們解析數(shù)據(jù);
3订讼、爬蟲(chóng)可以根據(jù)我們?cè)O(shè)定的規(guī)則自動(dòng)批量提取相關(guān)數(shù)據(jù)髓窜;
4、爬蟲(chóng)可以批量地把數(shù)據(jù)存儲(chǔ)到本地欺殿。
所以寄纵,人除了起心動(dòng)念,有邏輯地設(shè)計(jì)好規(guī)則后脖苏,剩下的爬蟲(chóng)都能替我們干了程拭。想想都舒服!
知識(shí)點(diǎn)1:requests庫(kù)
用途:
獲取數(shù)據(jù)
requests庫(kù)可以幫我們下載網(wǎng)頁(yè)源代碼棍潘、文本恃鞋、圖片,甚至是音頻(“下載”本質(zhì)上是向服務(wù)器發(fā)送請(qǐng)求并得到響應(yīng))亦歉。
requests.get()方法
用法舉例:
import requests #引入requests庫(kù)
res = requests.get('URL')
#requests.get是在調(diào)用requests庫(kù)中的get()方法恤浪,它向服務(wù)器發(fā)送了一個(gè)請(qǐng)求,括號(hào)里的參數(shù)是所需數(shù)據(jù)所在的網(wǎng)址肴楷,然后服務(wù)器對(duì)請(qǐng)求作出了響應(yīng)水由。響應(yīng)返回的結(jié)果賦值在變量res上
知識(shí)點(diǎn)2:Response對(duì)象的常用屬性
因?yàn)镻ython是一門(mén)面向?qū)ο缶幊痰恼Z(yǔ)言。在爬蟲(chóng)中赛蔫,理解數(shù)據(jù)是什么對(duì)象非常砂客、特別直秆、以及極其重要。只有知道了數(shù)據(jù)是什么對(duì)象鞭盟,才知道對(duì)象有什么屬性和方法可供我們操作圾结。
判斷數(shù)據(jù)的對(duì)象類(lèi)型方法是:
import requests
res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png')
print(type(res)) #打印變量res的數(shù)據(jù)類(lèi)型
其結(jié)果是:<class 'requests.models.Response'>。這代表著:res是一個(gè)對(duì)象齿诉,屬于requests.models.Response類(lèi)筝野。res是一個(gè)Response對(duì)象,我們也就可以去了解它的相應(yīng)屬性和方法了粤剧。
Response對(duì)象的常用屬性
1歇竟、response.status_code
作用:
檢查請(qǐng)求是否成功
舉例:
import requests
res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png')
print(res.status_code) #打印變量res的響應(yīng)狀態(tài)碼,以檢查請(qǐng)求是否成功
2抵恋、response.content
作用:
能把Response對(duì)象的內(nèi)容以二進(jìn)制數(shù)據(jù)的形式返回焕议,適用于圖片、音頻弧关、視頻的下載
舉例:下載一張圖片
import requests # 引入requests庫(kù)
res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png') # 發(fā)出請(qǐng)求盅安,并把返回的結(jié)果放在變量res中
pic = res.content # 把Reponse對(duì)象的內(nèi)容以二進(jìn)制數(shù)據(jù)的形式返回
photo = open('ppt.jpg','wb') # 新建一個(gè)文件ppt.jpg,這里的文件沒(méi)加路徑世囊,它會(huì)被保存在程序運(yùn)行的當(dāng)前目錄下别瞭。圖片內(nèi)容需要以二進(jìn)制wb讀寫(xiě)。在python基礎(chǔ)中open()函數(shù)里接觸過(guò)株憾。
photo.write(pic) # 獲取pic的二進(jìn)制內(nèi)容
photo.close() # 關(guān)閉文件
3蝙寨、response.text
作用:
可以把Response對(duì)象的內(nèi)容以字符串的形式返回,適用于文字嗤瞎、網(wǎng)頁(yè)源代碼的下載墙歪。
舉例:下載小說(shuō)
import requests #引用requests庫(kù)
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md') #下載《三國(guó)演義》第一回,我們得到一個(gè)對(duì)象贝奇,它被命名為res
novel=res.text #把Response對(duì)象的內(nèi)容以字符串的形式返回
print(novel[:800]) #打印小說(shuō)(考慮到整章太長(zhǎng)虹菲,只輸出800字)
4、response.encoding
作用:
能幫我們定義Response對(duì)象的編碼
舉例:
import requests #引用requests庫(kù)
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md') #下載《三國(guó)演義》第一回弃秆,我們得到一個(gè)對(duì)象届惋,它被命名為res
res.encoding='gbk' #定義Response對(duì)象的編碼為gbk
novel=res.text #把Response對(duì)象的內(nèi)容以字符串的形式返回
print(novel[:800]) #打印小說(shuō)的前800個(gè)字
其打印出來(lái)的結(jié)果是亂碼。因?yàn)樵}目當(dāng)中設(shè)置的編碼規(guī)則默認(rèn)為utf-8菠赚,如果硬要以gbk形式定義它,就會(huì)出現(xiàn)最終的亂碼結(jié)果郑藏。
使用條件:
只有當(dāng)結(jié)果顯示為亂碼時(shí)衡查,才返回來(lái)試驗(yàn)以其他編碼方式定義并確認(rèn)結(jié)果。
Robots協(xié)議
是互聯(lián)網(wǎng)爬蟲(chóng)的一項(xiàng)公認(rèn)的道德規(guī)范必盖,它的全稱(chēng)是“網(wǎng)絡(luò)爬蟲(chóng)排除標(biāo)準(zhǔn)”(Robots exclusion protocol)拌牲,這個(gè)協(xié)議用來(lái)告訴爬蟲(chóng)俱饿,哪些頁(yè)面是可以抓取的,哪些不可以塌忽。
協(xié)議使用方法
查看網(wǎng)站的robots協(xié)議拍埠,在網(wǎng)站的域名后加上/robots.txt就可以了。
協(xié)議里最常出現(xiàn)的英文是Allow和Disallow土居,Allow代表可以被訪問(wèn)枣购,Disallow代表禁止被訪問(wèn)。
好吧擦耀!出發(fā)棉圈,沖浪去(膽子夠大,給自己點(diǎn)贊)眷蜓!