Requests實(shí)現(xiàn)是比較人性化的只厘,也是最常用的方式。操作更加簡(jiǎn)單舅巷,更加人性化羔味。
Requests庫(kù)是第三方模塊,需要額外進(jìn)行安裝钠右「吃可以取GitHub上下載源碼,下載地址是:http://github.com/kennethreitz/requests/releases飒房。將源碼壓縮包解壓縮搁凸,然后進(jìn)入解壓縮后的文件夾,運(yùn)行setup.py即可狠毯。驗(yàn)證安裝是否成功的方法是在python中輸入import requests,若不報(bào)錯(cuò)护糖,即為安裝成功。
1.首先實(shí)現(xiàn)一個(gè)完整的請(qǐng)求與響應(yīng)模型嚼松。
GET請(qǐng)求
import requests
r=requests.get('http://www.baidu.com')
print(r.content) #輸出字節(jié)信息
POST請(qǐng)求
import requests
postdata={'key':'value'}#(在某個(gè)登陸頁(yè)面需要輸入用戶名嫡良,密碼)
r=requests.post('http://www.xxxx.com/login',data=postdata)
print(r.content)
HTTP中其他請(qǐng)求也可以用Requests實(shí)現(xiàn)
r=requests.put('http://www.xxxx.com/put',data={'key':'value'})
r=requests.delete('http://www.xxxx.com/delete')
r=requests.get('http://www.xxxx.com/get')
r=requests.head('http://www.xxxx.com/get')
r=requests.options('http://www.xxxx.com/get')
2.響應(yīng)與編碼
直接獲取網(wǎng)頁(yè)編碼并賦給r.encoding
chardet檢測(cè)字符串/文件編碼模塊锰扶,chardet.detect()返回字典
import requests
r=requests.get('http://www.baidu.com')
r.encoding=chardet.detect(r.content)['encoding']?
print r.text #這樣輸出的文本不會(huì)有亂碼
3.請(qǐng)求頭headers處理
在get函數(shù)中添加headers參數(shù)即可。
import requests
user_agent='Mozilla/4.0 (compatible; MSIE5.5; Windows NT)'
headers={'User-agent':user_agent}
r=requests.get('http://www.baidu.com',headers=headers)
print(r.content)
4.響應(yīng)碼code和響應(yīng)頭headers處理
獲取響應(yīng)碼使用Requests中的status_code字段寝受,獲取響應(yīng)頭使用Requests中的headers字段.
import requests
r=requests.get('http://www.baidu.com')
if r.status_code == requests.codes.ok:
? ? print r.status_code #響應(yīng)碼
? ? print r.headers #響應(yīng)頭
? ? print r.headers.get('content-type') # 推薦
? ? print r.header['content-type'] #不推薦
當(dāng)headers中沒(méi)有響應(yīng)字段時(shí)坷牛,第一種返回None;第二種會(huì)拋出異常。
5.Cookie處理
如果響應(yīng)中包含Cookie的值很澄,可以用如下方式獲取Cookie字段的值
import requests
user_agent='Mozilla/4.0 (compatible; MSIE5.5; Windows NT)'
headers={'User-agent':user_agent}
cookies = dict(name='qiye', age='10')
r=requests.get('http://www.baidu.com',headers=headers,cookies=cookies)
print(r.text)
還有一種更加高級(jí)京闰,且能自動(dòng)處理Cookie的方式,有時(shí)候我們并不關(guān)心Cookie的值是多少甩苛,只是希望每次訪問(wèn)的時(shí)候自動(dòng)把Cookie的值帶上蹂楣,向?yàn)g覽器一樣。Requests提供了一個(gè)session的概念浪藻,在連續(xù)訪問(wèn)網(wǎng)頁(yè)捐迫,處理登陸跳轉(zhuǎn)時(shí)特別方便乾翔,不需要關(guān)注具體細(xì)節(jié)爱葵。
import Requests
loginUrl = 'http://www.xxxx.com/login'
s=requests.Session()
#首先訪問(wèn)登陸界面,作為游客反浓,服務(wù)器會(huì)先分配一個(gè)cookie
r=s.get(loginUrl, allow_redirects=True)
datas = {'name':'qiye','passwd':'qiye'}
#向登陸鏈接發(fā)送post請(qǐng)求萌丈,驗(yàn)證成功,游客權(quán)限轉(zhuǎn)為會(huì)員權(quán)限
r=s.post(loginUrl,data=datas, allow_redirects=True)
print r.text
這種使用Session函數(shù)處理Cookie的方法今后會(huì)很常用雷则。
6.重定向與歷史信息
處理重定向只是需要設(shè)置一下allow_redirects字段即可辆雾,設(shè)置為True, 即允許重定向;設(shè)置為False月劈,則是禁止重定向度迂。如果運(yùn)行重定向可以通過(guò)r.history字段查看歷史信息,即訪問(wèn)成功之前的所有請(qǐng)求跳轉(zhuǎn)信息猜揪。
7.超時(shí)處理
超時(shí)選項(xiàng)時(shí)通過(guò)timeout來(lái)進(jìn)行設(shè)置的
requests.get('http://github.com',timeout=2)
8. 代理設(shè)置
import Requests
proxies = {?
"http": "http://0.10.1.10:3128"
"http": "http://10.10.1.10:1080"
}
requests.get('http://example.org',proxies=proxies)
請(qǐng)求得到URL文本后如何對(duì)網(wǎng)頁(yè)進(jìn)行解析惭墓,則是python爬蟲(chóng)開(kāi)發(fā)中非常關(guān)鍵的一步。HTML中網(wǎng)頁(yè)解析提取方式有多種而姐,分別為Firebug工具腊凶,正則表達(dá)式和Beautiful soup。本文主要介紹Beautiful soup拴念。欲知解析大法钧萍,且看下回分解。