網(wǎng)絡(luò)爬蟲規(guī)則
[TOC]
1. request庫入門
request庫的安裝
win平臺下政供,運行cmd朽基,輸入命令
pip install requests
request庫的7個主要方法
方法 | 含義 |
---|---|
requests.request() | 構(gòu)造一個請求 |
request.get() | 獲取html網(wǎng)頁的內(nèi)容 |
request.head() | 獲取html網(wǎng)頁頭信息的方法 |
request.post() | 向html頁面提交post請求 |
request.put() | 向html頁面提交put請求 |
request.patch() | 向html頁面提交局部的修改請求 |
request.delete() | 向html頁面提交刪除請求 |
注:其中稼虎,request方法是下面6個方法的基礎(chǔ)方法,其余6個方法都是在request方法基礎(chǔ)上實現(xiàn)的霎俩,由于一般服務(wù)器都有保護防止攻擊沉眶,所以put杉适、patch、delete方法一般不使用片习,常用的方法為get head post方法蹬叭,有關(guān)patch和put方法之間的區(qū)別下面有說。
HTTP協(xié)議
HTTP協(xié)議具垫,也稱為超文本傳輸協(xié)議筝蚕,Hypertext transfer protocol
HTTP是一個基于 請求與響應(yīng) 模式的、無狀態(tài)的應(yīng)用層協(xié)議起宽,HTTP協(xié)議采用URL作為定位網(wǎng)絡(luò)資源的標(biāo)識,URL格式如下:
http:/ /host[:port][path]
host:合法的主機域名或ip地址
port:端口號绿映,默認為80
path:請求資源的路徑
舉個例子腐晾,這是死侍2的百度網(wǎng)盤地址https://pan.baidu.com/s/14LYNSuRFqui6xySLtbIU3g#list/path=%2F
其中,pan.baidu.com/
是百度網(wǎng)盤的主機域名藻糖,s/14LYNSuRFqui6xySLtbIU3g#list/path=%2F
是資源的路徑
對于HTTP URL巨柒,可以理解為一個存在與INTERNET的文件路徑通過URL和HTTP協(xié)議,存取資源洋满,一個URL對應(yīng)的是一個數(shù)據(jù)資源
HTTP協(xié)議中對資源的操作有7種方法,分別為
- GET
請求獲取URL位置的資源 - HEAD
請求獲取URL位置資源的響應(yīng)消息報告正罢,即獲得該資源的頭部信息 - POST
請求向URL位置的資源后附加新的數(shù)據(jù)驻民,比如post表單之類 - PUT
請求向URL位置存儲一個資源袱饭,覆蓋原資源 - PATCH
請求局部更新URL位置的資源呛占,改變部分內(nèi)容 - DELETE
請求刪除URL位置資源
注:這里要理解PATCH
和PUT
的區(qū)別,patch僅僅是修改局部數(shù)據(jù)而且是由提交的內(nèi)容來修改疹味,put是將修改內(nèi)容作為新的內(nèi)容覆蓋掉url地址的全部內(nèi)容帜篇,path的優(yōu)勢在于,節(jié)省網(wǎng)絡(luò)帶寬
注意到requests庫和HTTP協(xié)議的操作方式是相同的笙隙,功能也是一致的
Requests庫方法詳解
requests庫的兩個重要對象
r = requests.get(url)
r為Response
對象竟痰,包含服務(wù)器返回的內(nèi)容資源,get中包含的是Request
對象坏快,是由函數(shù)構(gòu)建的發(fā)送給網(wǎng)頁的對象莽鸿,Response
對象包含服務(wù)器返回的所有信息,也包含請求的request信息
Response對象有下列屬性
屬性 | 說明 |
---|---|
r.status_code | HTTP請求的返回狀態(tài)祥得,200成功级及,其余表示失敗 |
r.text | HTTP響應(yīng)內(nèi)容的字符串形式,url對應(yīng)的頁面內(nèi)容 |
r.encoding | 從HTTP header中猜測編碼方式 |
r.apparent_encoding | 從內(nèi)容中分析出響應(yīng)內(nèi)容的編碼方式 |
r.content | HTTP響應(yīng)內(nèi)容的二進制形式 |
注:如果header中不存在charset
字段创千,則認為編碼為ISO-8859-1
Response對象存在一種異常處理方法追驴,為
r.raise_for_status()
如果r.status_code不等于200疏之,則引發(fā)異常,可以使用try-except捕捉
7個方法介紹
-
get() 方法
get方法的格式為
requests.get(url,params=None, **kw)
url:擬獲取頁面的url鏈接
params:url中的額外參數(shù)锋爪,字典或字節(jié)流格式爸业,可選
********kw**:12個控制訪問參數(shù)
get方法會返回response對象r亏镰,性質(zhì)上述以寫
-
head() 方法
requests.head(url, **kw)
返回網(wǎng)頁HTML頭的內(nèi)容
url:鏈接
****** kw:控制參數(shù)
-
post() 方法
payload = {'k1':'v1','k2':'v2'} r = requests.post(url, data = payload)
將字典POST后索抓,自動編碼為form
r = requests.post(url, data = 'ABC')
將字符串POST后,自動編碼為data逼肯,而form為空
格式為
requests.post(url, data=None, json=None, **kw)
url:鏈接
data:字典、字節(jié)序列或文件
json:JSON格式數(shù)據(jù)
********kw**:控制參數(shù)
-
put() 方法
用法同post
格式為
requests.put(url, data=None, **kw)
-
patch() 方法
requests.patch(url, data=None, **kw)
-
delete() 方法
requests.delete(url, **kw)
-
request() 方法
request方法內(nèi)存在參數(shù)method大刊,幾乎可以替代所有其他的方法
requests.request(method, url, **kw)
method:請求方式三椿,對應(yīng)get/post等等
url:鏈接
********kw**:控制參數(shù)
具體的請求方式為:GET、HEAD男翰、POST纽乱、PATCH、PUT鸦列、delete、OPTIONS
控制訪問參數(shù)
一共有12個控制訪問參數(shù):
params:字典或字節(jié)序列顽爹,作為參數(shù)增加到url中
kv = {key:value}
r = requests.get(url, params=kv)
=> url?key=value&key=value
data:字典骆姐、字節(jié)序列或文件對象,作為request的內(nèi)容
kv = {key:value}
r = requests.post(url, data=kv)
body = '主題內(nèi)容'
r = requests.post(url, data=body)
json:JSON格式的數(shù)據(jù)肉渴,作為request的內(nèi)容
kv = {key:value}
r = requests.post(url, json=kv)
headers:字典带射,HTTP定制頭,可以修改HTTP頭中的內(nèi)容,也就是說绪钥,可以修改頭中特定字段的內(nèi)容关炼,比如用戶代理user-agent
hd = {'user-agent':'Chrome\10'}
r = requests.post(url, headers = hd) #修改user-agent字段
以及
cookies:字典或cookiejar,request中的cookie
auth:元組跪楞,支持HTTP認證功能
files:字典類型侣灶,傳輸文件
fs = {'file':open('data.xls','rb')}
r = requests.post(url, files = fs)
還不知道怎么用
timeout:設(shè)定超時時間,秒為單位褥影,可以用在get方法防止請求時間過長
r = requsets.get(url, timeout = 10)
proxies:字典類型,設(shè)定訪問代理服務(wù)器校焦,可以增加登陸認證
pxs = {'http':'http://user:pass@10.10.10.1:1234'
'https':'https://10.10.10.1:4321' }
r = requests.get(url, proxies = pxs)
allow_redirects:True/False 默認為True统倒,重定向開關(guān)
strea:布爾,默認為True耸成,獲取內(nèi)容立即下載開關(guān)
verify:布爾浴鸿,默認為True,認證SSL證書開關(guān)
cert:本地SSL證書路徑
2. 網(wǎng)絡(luò)爬蟲盜亦有道
網(wǎng)絡(luò)爬蟲的尺寸
分為大中小三種尺寸
小規(guī)模 | 中規(guī)模 | 大規(guī)模 |
---|---|---|
爬取速度不敏感花竞,使用Request庫 | 數(shù)據(jù)規(guī)模較大掸哑,對于爬取速度敏感,使用Scrapy庫 | 爬取速度是關(guān)鍵苗分,定制開發(fā) |
網(wǎng)絡(luò)爬蟲引發(fā)問題
- 性能騷擾
- 法律風(fēng)險
- 隱私泄露
網(wǎng)絡(luò)爬蟲的限制方法
來源審查
? 網(wǎng)站服務(wù)器會通過檢查來訪HTTP協(xié)議的user-agent域,只響應(yīng)瀏覽器或友好爬蟲躺枕,比如淘寶= =
發(fā)布公告
? 通過網(wǎng)站的robots協(xié)議供填,告知所有爬蟲爬取策略,要求遵守叉瘩,robots協(xié)議存放在網(wǎng)站域名的根域名下robots.txt
文件粘捎,比如京東的
https://wwww.jd.com/robots.txt
內(nèi)容為
User-agent: *
Disallow: /?*
Disallow: /pop/*.html
Disallow: /pinpai/*.html?*
User-agent: EtaoSpider
Disallow: /
User-agent: HuihuiSpider
Disallow: /
User-agent: GwdangSpider
Disallow: /
User-agent: WochachaSpider
Disallow: /
# * 代表所有, / 代表根目錄
# 例如淘寶為
# User-agent: *
# Disallow: /
Robots協(xié)議如果不遵守攒磨,有法律風(fēng)險,但如果爬蟲的訪問頻率類似于人的話灸撰,不必遵守