requests

1.requests簡介

1.1 requests模塊簡介

  • Requests庫是現(xiàn)在目前公認的爬取網(wǎng)頁資源最好的第三方庫,相比于urllib它更加的人性化,符合人的思維邏輯。

1.2 requests模塊加載辦法

  • 在電腦上單擊開始--運行--輸入cmd--回車,彈出一個黑色界面。

Windows 命令提示符(cmd.exe)是 Windows NT 下的一個用于運行 Windows 控制面板程序或某些 DOS 程序的shell程序;或在 Windows CE 下只用于運行控制面板程序的外殼程序。

  • 輸入 pip install requests
  • 如果報錯,升級一下pip工具,pip install --upgrade pip

1.3 簡單用法

import requests
response=requests.get("http://wwww.baidu.com").content.decode()
print(response)
  • content返回的是二進制形式的網(wǎng)頁數(shù)據(jù),text返回字符串形式的網(wǎng)頁數(shù)據(jù)。

1.4 將get請求和請求頭傳入請求中

import requests

headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
wd={"wd":"大山"}
response=requests.get("http://www.baidu.com/s?",params=wd,headers=headers)
data=response.text 
data2=response.content 
print(data2.decode())

只需要將get請求以params參數(shù)傳入請求即可,不需要urllib.parse.urlencode(wd),然后拼接完整的url再傳入請求中.

2. 代理ip

2.1 代理IP簡單回顧

反爬蟲機制2,如果一直用同一個ip進行爬蟲,反扒機制將禁止,所以通過偽裝ip以及其他信息來訪問網(wǎng)站。

ip 我們在日常生活中,還是比較熟悉的,簡單來說每臺電腦都有一個ip地址,用戶通過ip地址訪問網(wǎng)站。

2.2 代理IP在requests中的用法

import requests
#不同于urllib模塊,將代理IP存入字典形式,而urllib則是存入[{"http":"59.62.164.212:9999"}]列表形式
proxy={
"http":"http://119.101.112.203:9999",
"http":"http://112.85.129.189:9999",
"https":"https://120.83.110.179:9999",
}

response=requests.get("http://www.baidu.com",proxies=proxy)

print(response.content.decode())

2.3 代理IP在urllib中的用法

#使用代理ip
import random
from urllib import request
proxylist=[
    {"http":"59.62.164.212:9999"},
    {"http":"183.47.2.201:30278"}
]
#隨機取值
proxy=random.choice(proxylist)
print(proxy)
#構(gòu)建代理處理器對象
proxyHandler=request.ProxyHandler(proxy)
#處理代理請求
#創(chuàng)建自定義的opener
opener=request.build_opener(proxyHandler)
#創(chuàng)建請求對象
req=request.Request("http://www.baidu.com")
res=opener.open(req)
print(res.read())

通過對比可以看出requests包的優(yōu)勢與人性化,urllib在處理代理IP時,需要先創(chuàng)建處理器對象,然后創(chuàng)建自定義的opener,如果想用request.urlopen()方法,還需要request.install_opener(opener)將opener設(shè)置為全局,才能使用。

而requests模塊僅僅在requests.get()中加入一個參數(shù)proxies=proxy即可。

3. cookiejar

3.1

cookiejar簡單來說就是獲取響應(yīng)的cookie,cookie是存儲在瀏覽器的一些信息,包括用戶的登陸信息和一些操作,我們從服務(wù)器中獲取的響應(yīng)信息中,有時候也會包含一些cookie信息。了解一點為了應(yīng)對不時之需。

import requests
response=requests.get("http://www.baidu.com")
#獲取返回的cookiejar對象,由于返回的值比較難以處理所以將cookiejar轉(zhuǎn)換成字典形式
cookiejar=response.cookies
print(cookiejar)
#將cookiejar轉(zhuǎn)換為字典形式的數(shù)據(jù)
dict1=requests.utils.dict_from_cookiejar(cookiejar)
print(dict1)
  • 返回結(jié)果
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
{'BDORZ': '27315'}

3.2 使用RequestsCookieJar自動保存并傳遞cookie

使用python的requests開發(fā)爬蟲程序的時候,經(jīng)常需要將之前請求返回的cookie值作為下一個請求的cookie進行調(diào)用,比如模擬登錄之后的返回的sessionID,就是需要作為后續(xù)請求的cookie參數(shù)

分成三步走:

  1. 通過requests模塊導(dǎo)入 from requests.cookies import RequestsCookieJar

  2. 進行實例化:jar = RequestsCookieJar()

  3. 進行設(shè)置: jar.set(cookie['name'], cookie['value'])

完成之后就可以在直接在請求網(wǎng)頁源文件的時候,將這個cookie帶上一起發(fā)送請求了

這個是用在模擬登錄的時候用到的,當(dāng)我使用pyppeteer模擬登錄的時候,獲取到的cookie是一個列表,所以這時候,就需要進行轉(zhuǎn)換了

4. session

4.1 session

session與cookie類似,都是一種緩存機制,不同的是cookie存儲在服務(wù)器中,session存在于服務(wù)端,cookie登錄存在一個有效期,而session登錄是傳入用戶名、密碼,每次登陸都傳入最新的cookie。

4.2 網(wǎng)頁簡單分析

人人網(wǎng).png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容