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ù)
分成三步走:
通過requests模塊導(dǎo)入 from requests.cookies import RequestsCookieJar
進行實例化:jar = RequestsCookieJar()
進行設(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)頁簡單分析
- 目標(biāo)網(wǎng)站,人人網(wǎng)http://www.renren.com/進入下一個網(wǎng)頁。
- http://www.renren.com/880151247/profile
- 構(gòu)造name和password構(gòu)造字典形式的用戶名密碼,用session.post請求傳入用戶名和密碼
