一绿贞、認識爬蟲
1. 什么是網(wǎng)絡(luò)爬蟲?
百度詞條解釋:網(wǎng)絡(luò)爬蟲(又稱為網(wǎng)頁蜘蛛誓酒,網(wǎng)絡(luò)機器人樟蠕,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁追逐者)靠柑,是一種按照一定的規(guī)則寨辩,自動地抓取萬維網(wǎng)信息的程序或者腳本。另外一些不常使用的名字還有螞蟻歼冰、自動索引靡狞、模擬程序或者蠕蟲。
通俗地講隔嫡,就是利用程序在網(wǎng)上拿到對我們有價值的數(shù)據(jù)甸怕。
2. 爬蟲可以做什么呢?
爬蟲能做很多事腮恩,能做商業(yè)分析梢杭,也能做生活助手,這是個人利用爬蟲所做到的事情秸滴。而公司武契,同樣可以利用爬蟲來實現(xiàn)巨大的商業(yè)價值。比如你所熟悉的搜索引擎——百度和谷歌荡含,它們的核心技術(shù)之一也是爬蟲咒唆,而且是超級爬蟲。
3. 爬蟲的工作原理是什么释液?
4. 爬蟲的四個步驟:
二全释、獲取數(shù)據(jù)
1. 獲取數(shù)據(jù):我們將會利用一個強大的庫——requests來獲取數(shù)據(jù)。
2. 在電腦上安裝requests庫的方法:
在Mac電腦里打開終端軟件(terminal)误债,輸入pip3 install requests浸船,然后點擊enter即可。
在Windows電腦里叫命令提示符(cmd)寝蹈,輸入pip install requests 即可李命。
打開這個網(wǎng)址, http://www.lfd.uci.edu/~gohlke/pythonlibs 在這個網(wǎng)站上面有很多 python 的第三方庫文件躺盛,我們按 ctrl+f 搜索很容易找到 requests 项戴。(怎么安裝第三方庫?)
3. Request.get()方法:
>>>import requests
#引入requests庫
>>>res = requests.get('URL')
#requests.get是在調(diào)用requests庫中的get()方法槽惫,它向服務(wù)器發(fā)送了一個請求周叮,括號里的參數(shù)是你需要的數(shù)據(jù)所在的網(wǎng)址辩撑,然后服務(wù)器對請求作出了響應(yīng)。
#我們把這個響應(yīng)返回的結(jié)果賦值在變量res上仿耽。
4. Response對象的常用屬性
1)打印變量res的數(shù)據(jù)類型
>>>import requests
>>>res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png')
>>>print(type(res))
#結(jié)果為res是一個對象合冀,屬于requests.models.Response類
2) Response對象常用的四個屬性:
3) Response.status_code 屬性
返回服務(wù)器是否同意請求或響應(yīng)的結(jié)果
>>>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)碼,以檢查請求是否成功
我們看到終端結(jié)果顯示了200项贺,這個數(shù)字代表服務(wù)器同意了請求君躺,并返回了數(shù)據(jù)給我們。
4)下面有一個表格开缎,供你參考不同的狀態(tài)碼代表什么:
5)response.content屬性
它能把Response對象的內(nèi)容以二進制數(shù)據(jù)的形式返回棕叫,適用于圖片、音頻奕删、視頻的下載俺泣。
>>>import requests
# 發(fā)出請求,并把返回的結(jié)果放在變量res中
>>>res = requests.get('https://res.pandateacher.com/2018-12-18-10-43-07.png')
# 把Reponse對象的內(nèi)容以二進制數(shù)據(jù)的形式返回
>>>pic = res.content
# 新建了一個文件ppt.jpg, 這里的文件沒加路徑完残,它會被保存在程序運行的當前目錄下伏钠。
# 圖片內(nèi)容需要以二進制wb讀寫, 你在學習open()函數(shù)時接觸過它。
>>>photo = open('ppt.jpg','wb')
# 獲取pic的二進制內(nèi)容
>>>photo.write(pic)
>>>photo.close() # 關(guān)閉文件
6) response.text屬性
它可以把Response對象的內(nèi)容以字符串的形式返回谨设,適用于文字熟掂、網(wǎng)頁源代碼的下載。
import requests #引用requests庫
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md') #下載《三國演義》第一回扎拣,我們得到一個對象赴肚,它被命名為res
novel=res.text #把Response對象的內(nèi)容以字符串的形式返回
print(novel[:800]) #,只輸出800字
7)response.encoding屬性
它能幫我們定義Response對象的編碼鹏秋。
目標數(shù)據(jù)本身有它的編碼類型尊蚁,用requests.get()發(fā)送請求后亡笑,我們得到一個Response對象侣夷,其中requests模塊會對數(shù)據(jù)的編碼類型做出自己的判斷。
但是仑乌,如果加入了代碼 :
>>>res.encoding='gbk'
不管原來的判斷是什么百拓,直接定義了Response對象的編碼類型是'gbk'。
這樣一來晰甚,如果跟數(shù)據(jù)本身的編碼是'utf-8'衙传,就不一致了,打印出來就是一堆亂碼厕九。
遇上文本的亂碼問題蓖捶,就考慮用res.encoding。
三扁远、實例:在網(wǎng)上爬取一段文本并保存到本地電腦
# 引入requests庫
import requests
#下載《三國演義》第一回俊鱼,我們得到一個對象刻像,它被命名為res
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/sanguo.md')
# 把Response對象的內(nèi)容以字符串的形式返回
novel = res.text
# 創(chuàng)建一個名為《三國演義》的txt文檔,指針放在文件末尾并闲,追加內(nèi)容
k = open('《三國演義》.txt','a+')
# 寫進文件中
k.write(novel)
# 關(guān)閉文檔
k.close()
四细睡、爬蟲倫理
1.? 有哪些反爬蟲策略呢??
網(wǎng)絡(luò)爬蟲在運行過程中也會遇到反爬蟲策略帝火,常見的有:
?訪問頻率限制
?Header頭部信息校驗
?采用動態(tài)頁面生成
?訪問地址限制
?登錄限制
?驗證碼限制
這些只是傳統(tǒng)的反爬蟲手段溜徙,隨著AI時代的到來,也會有更先進的手段的到來犀填。
2. Robots協(xié)議
Robots協(xié)議是互聯(lián)網(wǎng)爬蟲的一項公認的道德規(guī)范蠢壹,它的全稱是“網(wǎng)絡(luò)爬蟲排除標準”(Robots exclusion protocol),這個協(xié)議用來告訴爬蟲九巡,哪些頁面是可以抓取的知残,哪些不可以。
如何查看網(wǎng)站的robots協(xié)議呢比庄,很簡單求妹,在網(wǎng)站的域名后加上/robots.txt就可以了。
所以佳窑,當你在百度搜索“淘寶網(wǎng)”時制恍,會看到下圖的這兩行小字。
五神凑、本節(jié)回顧
1)什么是網(wǎng)絡(luò)爬蟲净神?
2)網(wǎng)絡(luò)爬蟲的工作原理?
3)網(wǎng)絡(luò)爬蟲的四個步驟是什么溉委?
4)response對象的四個屬性分別有什么作用鹃唯?
5)從網(wǎng)上爬取一段文字(或圖片)的代碼?