1. 程式人生 > >python3爬蟲攻略(9):requests的使用

python3爬蟲攻略(9):requests的使用

Requests 唯一的一個非轉基因的 Python HTTP 庫,人類可以安全享用。
Requests繼承了urllib的所有特性。
Requests支援HTTP連線保持和連線池,支援使用cookie保持會話,支援檔案上傳,支援自動確定響應內容的編碼,支援國際化的 URL 和 POST 資料自動編碼。
相對於urlilib的request來說Requests可以說是異常的強大。(話說回來,相同的名字,都是多了一個”s”那個比較牛掰,比如像SKT,KT……………………)
好了回到正題,使用requests最好還是參考官方文件: http://docs.python-requests.org/zh_CN/latest/index.html


Requests是第三方庫,需要使用pip install requests 安裝。

一:最基本的GET請求可以直接用get方法

import requests
url="http://www.4j4j.cn/"
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
response=requests.get(url=url,headers=headers)
#檢視響應頭部字元編碼
print(response.encoding)
#檢視url地址
print(response.url) #檢視響應內容,response.content返回的位元組流資料,需要decode(), #如果響應頭部字元編碼是utf-8編碼則decode("gbk"),反之則decode("utf-8") print(response.content.decode("utf-8")) #response.text 返回的是Unicode格式的資料 #如果響應頭部字元編碼是gbk編碼或者gb2312需要設定response.encoding="gbk"才能正常顯示 #如果響應頭部字元編碼是utf-8編碼則不需要處理 print(response.text)

二:新增headers和查詢引數

import requests
data={"wd":"美女"}
url="https://www.baidu.com/s?"
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
#params 接收一個字典或者字串的查詢引數,字典型別自動轉換為url編碼,不需要urlencode()
response=requests.get(url,params=data,headers=headers)
print(response.url)

三:基本POST請求,傳入data引數

import requests
data={  
        "from":"zh",  
        "to":"en",  
        "query":"拿破崙",  
        "transtype":"realtime",  
        "simple_means_flag":3     
    }
url="http://fanyi.baidu.com/v2transapi"
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
response=requests.post(url,data=data,headers=headers)
#如果返回的json檔案也可以直接像是
print(response.json())

四:代理(proxies引數)

import requests
# 根據協議型別,選擇不同的代理
proxies = {
  "http": "http://183.34.56.79:9527",
  "https": "http://183.34.56.79:9527",
}
response = requests.get("http://www.baidu.com", proxies = proxies)
print(response.text)

五:私密代理
免費代理速度慢,而且使用的人也多,容易衝突。所以如果想要使用流暢的代理,肯定還是隻用花錢買私密代理。

import requests
# 如果代理需要使用HTTP Basic Auth,可以使用下面這種格式:
proxy = { "http": "賬號:密碼@183.34.56.79:9527" }
response = requests.get("http://www.baidu.com", proxies = proxy)
print(response.text)

六:Cookies

import requests
response = requests.get("http://www.baidu.com/")
#返回CookieJar物件:
cookiejar = response.cookies
#將CookieJar轉為字典:
cookiedict=requests.utils.dict_from_cookiejar(cookiejar)
print (cookiejar)
print (cookiedict)

執行結果:
RequestsCookieJar[Cookie BDORZ=27315 for .baidu.com]
{‘BDORZ’: ‘27315’}

七:session
在 requests 裡,session物件是一個非常常用的物件,這個物件代表一次使用者會話:從客戶端瀏覽器連線伺服器開始,到客戶端瀏覽器與伺服器斷開。
會話能讓我們在跨請求時候保持某些引數,比如在同一個 Session 例項發出的所有請求之間保持 cookie 。

實現人人網登入

import requests
#建立session物件,可以儲存Cookie值
ssion = requests.session()
#處理 headers
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
#需要登入的使用者名稱和密碼
data = {"email":"人人網賬號", "password":"密碼"}  
#傳送附帶使用者名稱和密碼的請求,並獲取登入後的Cookie值,儲存在ssion裡
ssion.post("http://www.renren.com/PLogin.do", data = data)
#ssion包含使用者登入後的Cookie值,可以直接訪問那些登入後才可以訪問的頁面
response = ssion.get("http://www.renren.com/894073113/profile")
#列印響應內容
print (response.text)

執行效果:
這裡寫圖片描述