1. 程式人生 > >Python3爬蟲(四)請求庫的使用requests

Python3爬蟲(四)請求庫的使用requests

with open decode python3 url -c highlight pos pen req

Infi-chu:

http://www.cnblogs.com/Infi-chu/

一、基本用法:

1. 安裝:

pip install requests

2. 例子:

import requests
url = ‘http://www.baidu.com‘
r = requests.get(url)
print(type(r))    # 類型是str(JSON格式)
print(r.status_code)
print(r.text)
print(r.cookies)

【註】其余請求方法也是一樣的

r = requests.post(url)
r = requests.put(url)
r = requests.delete(url)
r = requests.head(url)
r = requests.options(url)

3. GET請求:

  • 例子
import requests
url = ‘http://www.baidu.com‘
r = requests.get(url)
print(r.text)

 若想在url中添加參數有兩種方式:

  a. 直接添加

r = requests.get(url+參數)

  b. 通過params參數添加

import requests
data = {"name":"Infi-chu","age":"23"}
r = requests.get(url,params=data)

網頁的返回類型是str類型,是JSON格式的,我們可以直接調用 json()方法

若返回結果不是JSON格式,便會出現解析錯誤,拋出 json.decode.JSONDecodeError異常

  • 抓取網頁

可使用正則表達式和headers。

  • 抓取二進制數據

圖片、音頻、視頻等文件本質上都是二進制碼組成的。

抓取GitHub圖標:

import requests
r = requests.get("http://github.com/favicon.ico")
print(r.text)
print(r.content)
# 保存圖片
with open(‘favicon.ico‘,‘wb‘) as f:
    f.write(r.content)
  • 添加headers

在爬取知乎時必須在User-Agent中加入信息,否則不能爬取,會被攔截

4. POST請求

improt requests
data = {‘name‘:‘Infi-chu‘,‘age‘=‘23‘}
r = requests.post(‘http://www.baidu.com‘,data=data)

 成功後會在form中看到所提交的數據(F12查看)

5. 響應

發送數據後,得到的就是響應,我們使用text和content獲取了內容,下面是另外的信息:

import requests
r = requests.get(‘http://www.baidu.com‘)
print(type(r.status_code),r.status_code)
print(type(r.headers),r.headers)
print(type(r.cookies),r.cookies)
print(type(r.history),r.history)
print(type(r.url),r.url)

 headers 屬性返回 CaseInsensitiveDict 類型

 cookies 屬性返回 RequestsCookieJar 類型

二、高級用法:

1.文件上傳

import requests
f = {‘file‘:open(‘favicon.ico‘,‘rb‘)}
r = requests.post(url,files=f)
print(r.text)

2.Cookies

import requests
r = requests.get(url)
print(r.cookies)
for k,v in r.cookies.items():
    print(k+"="+v)

3.會話維持

使用Session對象

import requests
s = requests.Session()
s.get(‘http://httpbin.org/cookies/set/number/123456789‘)
r = s.get(‘http://httpbin.org/cookies‘)
print(r.text)

4.SSL證書驗證

requests提供了證書驗證的功能,使用verify參數控制是否檢查此證書,默認是True,會自動驗證

5.代理設置

對於某些網站,在測試的時候請求幾次,能正常獲取信息,但是一旦大規模爬取,可能會出現驗證碼或直接封掉IP,導致一段時間內無法訪問

代理設置:

import requests
proxy = {‘http‘:‘http://ip:port‘,‘https‘:‘https://ip:port‘}
requests.get(‘https://www.taobao.com‘,proxies=proxy)

6.超時設置

import requests
r = requests.get(‘https://www.taobao.com‘,timeout=1)
print(r.status_code)

  

7.身份認證

import requests
from requests.auth import HTTPBasicAuth
r = requests.get(url,auth=HTTPBasicAuth(‘username‘,‘password‘))
print(r.status_code)

# 可簡寫為
r = requests.get(url,auth=(‘username‘,‘password‘))
print(r.status_code)
# 也提供了OAuth認證,使用 pip3 install requests_oauthlib

8.Prepared Request

將請求表示為數據結構,這個數據結構叫Prepared Request

Python3爬蟲(四)請求庫的使用requests