CH1 網(wǎng)絡(luò)爬蟲規(guī)則

網(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位置資源

注:這里要理解PATCHPUT的區(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ā)問題

  1. 性能騷擾
  2. 法律風(fēng)險
  3. 隱私泄露

網(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)險,但如果爬蟲的訪問頻率類似于人的話灸撰,不必遵守

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拼坎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子债蓝,更是在濱河造成了極大的恐慌盛龄,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹦锋,死亡現(xiàn)場離奇詭異欧芽,居然都是意外死亡,警方通過查閱死者的電腦和手機千扔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門曲楚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人龙誊,你說我怎么就攤上這事『资鳎” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵曲伊,是天一觀的道長追他。 經(jīng)常有香客問我,道長邑狸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任昂利,我火速辦了婚禮铁坎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扩所。我一直安慰自己朴乖,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布袁勺。 她就那樣靜靜地躺著畜普,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吃挑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天埠通,我揣著相機與錄音逛犹,去河邊找鬼梁剔。 笑死舞蔽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的众雷。 我是一名探鬼主播做祝,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼们拙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起揣苏,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脯厨,沒想到半個月后坑质,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡稼跳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年吃沪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萎津。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡抹镊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颈渊,到底是詐尸還是另有隱情,我是刑警寧澤俊嗽,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站芯咧,受9級特大地震影響竹揍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芬位,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一昧碉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧被饿,春花似錦、人聲如沸狭握。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗅辣。三九已至,卻和暖如春愿题,著一層夾襖步出監(jiān)牢的瞬間蛙奖,已是汗流浹背潘酗。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雁仲,地道東北人仔夺。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像攒砖,于是被迫代替她去往敵國和親缸兔。 傳聞我的和親對象是個殘疾皇子日裙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 聲明:本文講解的實戰(zhàn)內(nèi)容,均僅用于學(xué)習(xí)交流惰蜜,請勿用于任何商業(yè)用途昂拂! 一、前言 強烈建議:請在電腦的陪同下抛猖,閱讀本文...
    Bruce_Szh閱讀 12,679評論 6 28
  • 1. 概述 本文主要介紹網(wǎng)絡(luò)爬蟲,采用的實現(xiàn)語言為Python财著,目的在于闡述網(wǎng)絡(luò)爬蟲的原理和實現(xiàn)联四,并且對目前常見的...
    Lemon_Home閱讀 2,727評論 0 21
  • 上網(wǎng)原理 1、爬蟲概念 爬蟲是什麼瓢宦? 蜘蛛碎连,蛆灰羽,代碼中驮履,就是寫了一段代碼,代碼的功能從互聯(lián)網(wǎng)中提取數(shù)據(jù) 互聯(lián)網(wǎng): ...
    riverstation閱讀 8,030評論 1 2
  • 昨天廉嚼,我們更多的討論了request的基礎(chǔ)API玫镐,讓我們對它有了基礎(chǔ)的認知。學(xué)會上一課程怠噪,我們已經(jīng)能寫點基本的爬蟲...
    阿爾卑斯山上的小灰兔閱讀 12,237評論 1 8
  • 一說到REST恐似,我想大家的第一反應(yīng)就是“啊,就是那種前后臺通信方式傍念〗靡模”但是在要求詳細講述它所提出的各個約束,以及如...
    時待吾閱讀 3,410評論 0 19