python爬蟲---requests庫的用法

requests是python實現(xiàn)的簡單易用的HTTP庫葡公,使用起來比urllib簡潔很多

因為是第三方庫序目,所以使用前需要cmd安裝

pip install requests

安裝完成后import一下,正常則說明可以開始使用了岩梳。

基本用法:

requests.get()用于請求目標網(wǎng)站囊骤,類型是一個HTTPresponse類型

import requests

response = requests.get('http://www.baidu.com')

print(response.status_code)? # 打印狀態(tài)碼

print(response.url)? ? ? ? ? # 打印請求url

print(response.headers)? ? ? # 打印頭信息

print(response.cookies)? ? ? # 打印cookie信息

print(response.text)? #以文本形式打印網(wǎng)頁源碼

print(response.content) #以字節(jié)流形式打印

運行結果:

狀態(tài)碼:200

url:www.baidu.com

headers信息

import requests

requests.get('http://httpbin.org/get')

requests.post('http://httpbin.org/post')

requests.put('http://httpbin.org/put')

requests.delete('http://httpbin.org/delete')

requests.head('http://httpbin.org/get')

requests.options('http://httpbin.org/get')


基本的get請求

import requests

response = requests.get('http://httpbin.org/get')print(response.text)

結果




帶參數(shù)的GET請求:

第一種直接將參數(shù)放在url內(nèi)

import requests

response = requests.get(http://httpbin.org/get?name=gemey&age=22)print(response.text)

結果

另一種先將參數(shù)填寫在dict中,發(fā)起請求時params參數(shù)指定為dict

import requests

data = {

? ? 'name':'tom',

? ? 'age': 20}

response = requests.get('http://httpbin.org/get', params=data)

print(response.text)

結果同上


解析json

import requests

response = requests.get('http://httpbin.org/get')

print(response.text)

print(response.json())

#response.json()方法同

json.loads(response.text)

print(type(response.json()))

結果


簡單保存一個二進制文件

二進制內(nèi)容為response.content

import requests

response = requests.get('http://img.ivsky.com/img/tupian/pre/201708/30/kekeersitao-002.jpg')

b = response.content

with open('F://fengjing.jpg','wb') as f:

? ? f.write(b)


為你的請求添加頭信息

import requests

heads = {}

heads['User-Agent'] = 'Mozilla/5.0 ' \

? ? ? ? ? ? ? ? ? ? ? ? ? '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 ' \

? ? ? ? ? ? ? ? ? ? ? ? ? '(KHTML, like Gecko) Version/5.1 Safari/534.50'

response = requests.get('http://www.baidu.com',headers=headers)


使用代理

同添加headers方法冀值,代理參數(shù)也要是一個dict

這里使用requests庫爬取了IP代理網(wǎng)站的IP與端口和類型

因為是免費的也物,使用的代理地址很快就失效了。

import requestsimport redef get_html(url):

? ? proxy = {

? ? ? ? 'http':'120.25.253.234:812','https''163.125.222.244:8123'? ? }

? ? heads = {}

? ? heads['User-Agent'] ='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'? ? req = requests.get(url, headers=heads,proxies=proxy)

? ? html = req.text

? ? return htmldef get_ipport(html):

? ? regex = r'(.+)'? ? iplist = re.findall(regex, html)

? ? regex2 ='(.+)'? ? portlist = re.findall(regex2, html)

? ? regex3 = r'(.+)'? ? typelist = re.findall(regex3, html)

? ? sumray = []

? ? foriin iplist:

? ? ? ? forpin portlist:

? ? ? ? ? ? fortin typelist:

? ? ? ? ? ? ? ? passpass? ? ? ? a = t+','+i +':'+ p

? ? ? ? sumray.append(a)

? ? print('高匿代理')

? ? print(sumray)if__name__=='__main__':

? ? url ='http://www.kuaidaili.com/free/'? ? get_ipport(get_html(url))

結果:



基本POST請求:

import requests

data = {'name':'tom','age':'22'}

response = requests.post('http://httpbin.org/post', data=data)


?獲取cookie

#獲取cookieimport requests

response = requests.get('http://www.baidu.com')

print(response.cookies)

print(type(response.cookies))

for k,v in response.cookies.items():

? ? print(k+':'+v)

結果:



會話維持

import requests

session = requests.Session()

session.get('http://httpbin.org/cookies/set/number/12345')

response = session.get('http://httpbin.org/cookies')print(response.text)

結果:


證書驗證設置

import requestsfromrequests.packagesimport urllib3

urllib3.disable_warnings()? #從urllib3中消除警告response = requests.get('https://www.12306.cn',verify=False)#證書驗證設為FALSEprint(response.status_code)

打印結果:200


超時異常捕獲

import requestsfromrequests.exceptionsimport ReadTimeouttry:

? ? res = requests.get('http://httpbin.org', timeout=0.1)

? ? print(res.status_code)except ReadTimeout:

? ? print(timeout)


異常處理

在你不確定會發(fā)生什么錯誤時列疗,盡量使用try...except來捕獲異常

所有的requests exception:

Exceptions

import requestsfromrequests.exceptionsimport ReadTimeout,HTTPError,RequestExceptiontry:

? ? response = requests.get('http://www.baidu.com',timeout=0.5)

? ? print(response.status_code)except ReadTimeout:

? ? print('timeout')except HTTPError:

? ? print('httperror')except RequestException:

? ? print('reqerror')

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滑蚯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抵栈,更是在濱河造成了極大的恐慌告材,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件古劲,死亡現(xiàn)場離奇詭異斥赋,居然都是意外死亡,警方通過查閱死者的電腦和手機产艾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門疤剑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滑绒,“玉大人,你說我怎么就攤上這事隘膘∫晒剩” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵弯菊,是天一觀的道長纵势。 經(jīng)常有香客問我,道長管钳,這世上最難降的妖魔是什么钦铁? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蹋嵌,結果婚禮上育瓜,老公的妹妹穿的比我還像新娘。我一直安慰自己栽烂,他們只是感情好躏仇,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腺办,像睡著了一般焰手。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怀喉,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天书妻,我揣著相機與錄音,去河邊找鬼躬拢。 笑死躲履,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的聊闯。 我是一名探鬼主播工猜,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菱蔬!你這毒婦竟也來了篷帅?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤拴泌,失蹤者是張志新(化名)和其女友劉穎魏身,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚪腐,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡箭昵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了回季。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡口糕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情收苏,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布挥下,位于F島的核電站汰具,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粥烁。R本人自食惡果不足惜贤笆,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望讨阻。 院中可真熱鬧芥永,春花似錦、人聲如沸钝吮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奇瘦。三九已至棘催,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耳标,已是汗流浹背醇坝。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留次坡,地道東北人呼猪。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像砸琅,于是被迫代替她去往敵國和親宋距。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

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