Python---爬蟲常用模塊requests(第三方模塊)

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

https://blog.csdn.net/imail2016/article/details/72381989

https://www.cnblogs.com/windyrainy/p/10593806.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章