requests模塊的各種請求方式
import requests
requests.get(url, params=None, **kwargs) # 獲取HTML網頁的主要方法,對應於HTTP的GET
requests.post(url, data=None, json=None, **kwargs) # 向HTML網頁提交POST請求的方法,對應於HTTP的POST
requests.put(url, data=None, **kwargs) # 向HTML網頁提交PUT請求,對應於HTTP的PUT
requests.head(url, **kwargs) # 獲取HTML網頁頭信息的方法,對應於HTTP的HEAD
requests.delete(url, **kwargs) # 向HTML頁面提交刪除請求,對應於HTTP的DELETE
requests.patch(url, data=None, **kwargs) # 向HTML網頁提交局部修改請求,對應於HTTP的PATCH
requests.options(url, **kwargs)
requests.request(method, url, **kwargs) # 以上方法均是在此方法的基礎上構建
r = requests.get("http://www.renren.com", params={'key':'value'})
r = requests.request(method="get", "http://www.renren.com", params={'key':'value'}) # 相當於上一行的get請求
r = requests.post("http://httpbin.org/post", data = {'key':'value'})
r = requests.request(method="post", "http://httpbin.org/post", data = {'key':'value'}) # 相當於上一行的post請求
# requests模塊發送請求有data、json、params三種攜帶參數的方法。
# params在get請求中使用,data、json在post請求中使用。
# params可以接收的參數:可以是字典,可以是字符串,字典字符串都會被自動編碼發送到url。可以是字節(必須是ascii編碼以內)。
# data 可以接收的參數爲:字典,字符串,字節,文件對象,data和json兩者的區別在於data的請求體爲name=alex&age=18格式而json請求體爲‘{'k1': 'v1', 'k2': '水電費'}’(字符串)
# json:將json中對應的數據進行序列化成一個字符串,json.dumps(...)。然後發送到服務器端的body中,並且Content-Type是 {'Content-Type': 'application/json'}
requests模塊的各種響應結果
import requests
import urllib
value = {'username': 'admin', 'password': '123'}
header = {"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"}
response = requests.get("http://www.baidu.com", params=value, headers=header) # get形式提交參數
data = urllib.urlencode(value)
response = requests.get("http://www.baidu.com", data=data, headers=header) # post形式提交參數
# 查看響應內容,response.text 返回的是Unicode格式的數據。響應內容的字符串形式,即返回的頁面內容
print response.text
# 查看響應內容,response.content返回的字節流數據。響應內容的二進制形式
print response.content
# 查看請求的完整url地址
print response.url
# 查看響應頭部字符編碼,同時也可以設置編碼:response.encoding = "utf-8"
print response.encoding
# 查看響應狀態碼
print response.status_code
# 查看響應頭信息,返回的是一個字典對象。
print response.headers
# 查看響應頭的具體的某個屬性的信息
print response.headers['Content-Type']
# 查看請求頭信息,返回的是一個字典對象,不修改的話,默認是python的請求頭
print response.request.headers
# 查看響應對應請求的cookie
print response.request.cookies
# 查看響應的cookie信息(經過了set-cookie動作),返回的是一個字典對象
print response.cookies
print ';'.join(['='.join(item) for item in response.cookies.items()]) # 打印出具體的cookies信息
# 從內容中分析出的響應內容編碼方式(備選編碼方式)
print response.apparent_encoding
# 如果狀態不是200,則引發異常
try:
response.raise_for_status()
except:
print("產生異常")
# 參考:https://blog.csdn.net/qq_36119192/article/details/82951408
requests模塊的GET請求
import requests
kw = {"username": "liu", "password": "123"}
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"}
# params 接收一個字典或者字符串的查詢參數,字典類型自動轉換爲url編碼,不需要urlencode()
response = requests.get("http://www.baidu.com/s?", params=kw, headers=headers)
# 查看響應內容,response.text 返回的是Unicode格式的數據
print response.text
requests模塊的POST請求
import requests
formdata = {
"i": "l love you",
"doctype": "json",
"keyfrom": "fanyi.web",
}
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
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",
"Content-Type": "application/x-www-form-urlencoded", # 參數是data
"Content-Type": "application/json"} # 參數是json
response = requests.post(url, data=formdata, headers=headers)
print response.text
print response.json() # 如果是json文件可以直接顯示
requests模塊的基本請求
import requests
##設置請求頭
header = {'Host': 'www.baidu.com', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)', 'Referer': 'http://www.baidu.com/login/'}
values = {'name': 'Tom', 'sex': 'Man', 'age': '26'} # 設置提交的數據
proxy = {"http": "http://127.0.0.1:8088"} # 設置代理
requrl = "http://www.baidu.com" # 請求的url
# 使用session保持會話請求
session = requests.session()
response = session.get("https://www.baidu.com", params=values, headers=header, timeout=3, proxies=proxy)
response = session.post("https://www.baidu.com", data=values, headers=header, timeout=3, proxies=proxy)
# GET請求
response = requests.get(url=requrl, params=values, headers=header, timeout=3, proxies=proxy)
# POST請求
response = requests.post(url=requrl, data=values, headers=header, timeout=3, proxies=proxy)
Cookies
import requests
response = requests.get("http://www.baidu.com/")
# 返回CookieJar對象:
cookiejar = response.cookies
print cookiejar # 結果:<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
# 將CookieJar轉爲字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print cookiedict # 結果:{'BDORZ': '27315'}
# 將字典轉爲CookieJar:
cookiejar = requests.utils.cookiejar_from_dict(cookiedict, cookiejar=None, overwrite=True)
print cookiejar # 結果:<RequestsCookieJar[<Cookie BDORZ=27315 for />]>
import requests
session = requests.session()
session.get('http://www.baidu.com')
# 返回CookieJar對象:
cookiejar = session.cookies
print cookiejar # 結果:<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
# 將CookieJar轉爲字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print cookiedict # 結果:{'BDORZ': '27315'}
# 將字典轉爲CookieJar:
cookiejar = requests.utils.cookiejar_from_dict(cookiedict, cookiejar=None, overwrite=True)
print cookiejar # 結果:<RequestsCookieJar[<Cookie BDORZ=27315 for />]>
# 參考:https://www.cnblogs.com/R4v3n/articles/8964800.html
# 經典:https://www.jianshu.com/p/77993645fba3
# 經典:https://www.cnblogs.com/xiugeng/p/9877265.html
Session
import requests
#爬蟲一定要使用代理 防止封IP
proxy = {"HTTP": "162.247.156.88", "HTTPS": "236.21.56.128"}
# 1. 處理 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"}
# 2. 需要登錄的用戶名和密碼
data = {"email": "qq賬號", "password": "qq密碼"}
# 3. 創建session對象,可以保存Cookie值
session = requests.session()
# 4. 發送附帶用戶名和密碼的請求,並獲取登錄後的Cookie值,保存在session裏
session.post("http://www.renren.com/PLogin.do", data=data, headers=headers, proxies=proxy)
# 5. session包含用戶登錄後的Cookie值,可以直接訪問那些登錄後纔可以訪問的頁面。
response = session.get("http://www.renren.com/972013042/profile")
# 6. 打印響應內容
print response.text
# 參考:https://www.cnblogs.com/lingxia/p/9074620.html
Web客戶端驗證(auth認證)
import requests
from requests.auth import HTTPBasicAuth
auth = ("admin", "admin")
response = requests.get('http://162.256.54.121:8888/2fa86bd2', auth=auth)
response = requests.get('http://162.256.54.121:8888/2fa86bd2', auth=HTTPBasicAuth("admin", "admin"))
response.encoding = 'gbk'
print response.text
# 如果是Web客戶端驗證,需要添加 auth = (賬戶名, 密碼)。BasicAuth 的認證方式。
# 認證設置:登陸網站是,彈出一個框,要求你輸入用戶名密碼(與alter很類似),此時是無法獲取html的。
# 但本質原理是拼接成請求頭髮送:r.headers['Authorization'] = _basic_auth_str(self.username, self.password)
# HTTPBasicAuth實際是向瀏覽器發一個帶有Authorization:.................的請求
# 參考:https://www.jianshu.com/p/77993645fba3 與 https://www.cnblogs.com/wlx97e6/p/9950678.html
https://www.cnblogs.com/wlx97e6/p/9950678.html
https://www.cnblogs.com/lowmanisbusy/p/9065359.html
https://blog.csdn.net/qq_41804164/article/details/80993323