三、Cookie以及Requests庫的使用

1. Cookie

為什么要使用Cookie呢巧颈?

Cookie畦木,指某些網(wǎng)站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)砸泛。比如說有些網(wǎng)站需要登錄后才能訪問某個頁面十籍,在登錄之前,你想抓取某個頁面內(nèi)容是不允許的唇礁。那么我們可以利用Urllib庫保存我們登錄的Cookie勾栗,然后再抓取其他頁面就達到目的了。

1) Opener

當你獲取一個URL你使用一個opener(一個urllib.OpenerDirector的實例)盏筐。在前面围俘,我們都是使用的默認的opener,也就是urlopen琢融。它是一個特殊的opener界牡,可以理解成opener的一個特殊實例,傳入的參數(shù)僅僅是url漾抬,data宿亡,timeout。如果我們需要用到Cookie纳令,只用這個opener是不能達到目的的她混,所以我們需要創(chuàng)建更一般的opener來實現(xiàn)對Cookie的設(shè)置烈钞。

2)Cookielib

cookielib模塊的主要作用是提供可存儲cookie的對象,以便于與urllib模塊配合使用來訪問Internet資源坤按。Cookielib模塊非常強大毯欣,我們可以利用本模塊的CookieJar類的對象來捕獲cookie并在后續(xù)連接請求時重新發(fā)送,比如可以實現(xiàn)模擬登錄功能臭脓。該模塊主要的對象有CookieJar酗钞、FileCookieJar、MozillaCookieJar来累、LWPCookieJar

2. URLError

首先解釋下URLError可能產(chǎn)生的原因:

- 網(wǎng)絡(luò)無連接砚作,即本機無法上網(wǎng)

- 連接不到特定的服務(wù)器

- 服務(wù)器不存在

在代碼中,我們需要用try-except語句來包圍并捕獲相應(yīng)的異常,代碼如下:

```

from urllib.request import Request, urlopen

from urllib.error import URLError

url = "嘹锁。葫录。。"

try:

? ? headers = {

? ? ? ? "User-Agent": "领猾。米同。。摔竿。"

? ? }

? ? req = Request(url, headers=headers)

? ? resp = urlopen(url, timeout=1)

? ? print(resp.read().decode())

except URLError as e:

? ? if len(e.args) == 0:

? ? ? ? print(e.code)

? ? else:

? ? ? ? print(e.args[0])

print("獲取數(shù)據(jù)完畢")

```


關(guān)于requests庫

1. 安裝

利用 pip 安裝

pip install requests

2. 基本請求

```

req = requests.get("http://www.baidu.com")

req = requests.post("http://www.baidu.com")

req = requests.put("http://www.baidu.com")

req = requests.delete("http://www.baidu.com")

req = requests.head("http://www.baidu.com")

req = requests.options("http://www.baidu.com")

```

1) get請求

參數(shù)是字典面粮,我們也可以傳遞json類型的參數(shù):

```

import requests

url = "http://www.baidu.com/s"

params = {'wd': '尚學堂'}

response = requests.get(url, params=params)

print(response.url)

response.encoding = 'utf-8'

html = response.text

# print(html)

```

2) post請求

參數(shù)是字典,我們也可以傳遞json類型的參數(shù):

```

url = "继低。熬苍。。袁翁。"

formdata = {

? ? "user": "柴底。。粱胜。柄驻。",

? ? "password": "。年柠。凿歼。。"

}

response = requests.post(url, data=formdata)

response.encoding = 'utf-8'

html = response.text

# print(html)

```

3)自定義請求頭部

> 偽裝請求頭部是采集時經(jīng)常用的冗恨,我們可以用這個方法來隱藏:

headers = {'User-Agent': 'python'}

r = requests.get('答憔。。掀抹。虐拓。', headers = headers)

print(r.request.headers['User-Agent'])

4)設(shè)置超時時間

> 可以通過timeout屬性設(shè)置超時時間,一旦超過這個時間還沒獲得響應(yīng)內(nèi)容傲武,就會提示錯誤

requests.get('蓉驹。城榛。。', timeout=0.001)

5) 代理訪問

> 采集時為避免被封IP态兴,經(jīng)常會使用代理狠持。requests也有相應(yīng)的proxies屬性

import requests

proxies = {

? "http": "http://10.10.1.10:3128",

? "https": "https://10.10.1.10:1080",

}

requests.get("。瞻润。喘垂。", proxies=proxies)

> 如果代理需要賬戶和密碼,則需這樣

```

proxies = {

? ? "http": "http://user:pass@10.10.1.10:3128/",

}

```

6) session自動保存cookies

> seesion的意思是保持一個會話绍撞,比如 登陸后繼續(xù)操作(記錄身份信息) 而requests是單次請求的請求正勒,身份信息不會被記錄

```

# 創(chuàng)建一個session對象

s = requests.Session()

# 用session對象發(fā)出get請求,設(shè)置cookies

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')

```

7) ssl驗證

# 禁用安全請求警告

requests.packages.urllib3.disable_warnings()

resp = requests.get(url, verify=False, headers=headers)

3.獲取響應(yīng)信息

代碼 | 含義

-- | --

resp.json()|獲取響應(yīng)內(nèi)容(以json字符串)

resp.text| 獲取響應(yīng)內(nèi)容 (以字符串)

resp.content|獲取響應(yīng)內(nèi)容(以字節(jié)的方式)

resp.headers|獲取響應(yīng)頭內(nèi)容

resp.url|獲取訪問地址

resp.encoding| 獲取網(wǎng)頁編碼

resp.request.headers| 請求頭內(nèi)容

resp.cookie| 獲取cookie

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末傻铣,一起剝皮案震驚了整個濱河市章贞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌非洲,老刑警劉巖鸭限,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怪蔑,居然都是意外死亡里覆,警方通過查閱死者的電腦和手機丧荐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門缆瓣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虹统,你說我怎么就攤上這事弓坞。” “怎么了车荔?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵渡冻,是天一觀的道長。 經(jīng)常有香客問我忧便,道長族吻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任珠增,我火速辦了婚禮超歌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒂教。我一直安慰自己巍举,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布凝垛。 她就那樣靜靜地躺著懊悯,像睡著了一般蜓谋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炭分,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天桃焕,我揣著相機與錄音,去河邊找鬼捧毛。 笑死覆旭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的岖妄。 我是一名探鬼主播型将,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荐虐!你這毒婦竟也來了七兜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤福扬,失蹤者是張志新(化名)和其女友劉穎腕铸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铛碑,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡狠裹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了汽烦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涛菠。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撇吞,靈堂內(nèi)的尸體忽然破棺而出俗冻,到底是詐尸還是另有隱情,我是刑警寧澤牍颈,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布迄薄,位于F島的核電站,受9級特大地震影響煮岁,放射性物質(zhì)發(fā)生泄漏讥蔽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一画机、第九天 我趴在偏房一處隱蔽的房頂上張望冶伞。 院中可真熱鬧,春花似錦色罚、人聲如沸碰缔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽金抡。三九已至瀑焦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間梗肝,已是汗流浹背榛瓮。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巫击,地道東北人禀晓。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像坝锰,于是被迫代替她去往敵國和親粹懒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351