python爬蟲(六) Cookie


什么是Cookie

在網站中,http的請求通常是無狀態的(第一個和服務器連接並且登錄之后,此時服務器知道是哪個用戶,但是當第二次請求服務器時,服務器依然不知道當前請求的是哪個用戶),cookie就是為了解決這個問題,第一次登錄服務器后,服務器會返回與剛剛用戶相關的數據(也就是cookie)給瀏覽器,瀏覽器將cookie保存在本地,當這個用戶第二次請求服務器時,就會把上次存儲的cookie自動攜帶給服務器,服務器通過這個cookie就知道當前是哪個用戶。cookiede存儲數據有限,不同的瀏覽器存儲大小不同。一般不超過4kb。

在一些爬蟲中,我們在進入一個頁面之前需要先登錄,比如人人網,我們想要在人人網中瀏覽大鵬的主頁,就要先注冊登錄,然后才能瀏覽,那么在爬蟲時,如何保持登錄狀態呢?

第一種:

就需要在請求頭中加入cookie。

我們在頁面中右擊-選擇查看元素-然后選擇network-刷新選擇第一個profile-然后找到cookie

 

 

 

 把cookie放到外我們代碼的請求頭中

# 使用cookie如何保持登錄
from urllib import request
dapeng_url='http://www.renren.com/880151247/profile'

headers={
    'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
    'Cookie':"anonymid=k71toeni-kgxl6w; ick=15da19e2-eda3-436b-bbff-75e5ed22675a; t=2e83d3955db7ebed31b7aa451ce1fc3e6; societyguester=2e83d3955db7ebed31b7aa451ce1fc3e6; id=973827756; xnsid=83d505c7; XNESSESSIONID=96f6169a931b; JSESSIONID=abcnUOS-mxGHLfAakl8bx; depovince=GW; jebecookies=06d125d2-feee-42d3-b3dd-c2d44c83ca52|||||; ver=7.0; loginfrom=null; taihe_bi_sdk_uid=e1ab093fade1d5f67bb87b09690c33ec; taihe_bi_sdk_session=b22cdcce97f748cdd571ae2dd15f35c0; jebe_key=3f1e8e5f-c442-44f0-913c-b5724bf5f271%7C92df3a4ff360db67ebedb3fcbe322fc1%7C1582631331810%7C1%7C1582631331959; jebe_key=3f1e8e5f-c442-44f0-913c-b5724bf5f271%7C92df3a4ff360db67ebedb3fcbe322fc1%7C1582631331810%7C1%7C1582631331961; wp_fold=0"
}
req=request.Request(url=dapeng_url,headers=headers)
resp=request.urlopen(req)
print(resp.read().decode('utf-8'))

我們就可以在保持登錄的狀態下進入大鵬的主頁

第二種:

http.cookiejar模塊:該模塊主要得類有:cookiejar、filecookiejar、mozaillacookiejar、lwpcookiejar。我們使用第一個就行,保存在類存中。

這一種可以實現自動化,不需要每次都在請求頭中復制cookie

from urllib import request
from urllib import parse
from http.cookiejar import CookieJar


# 1、登錄
# 1.1、創建一個cookiejar對象,里面包含了登錄用到得信息
cookiejar=CookieJar()
# 1.2 使用cookiejar創建一個HTTPCookieProcess對象,找個代理,並且里面已經包含了cookiejar
handler=request.HTTPCookieProcessor(cookiejar)
# 1.3、使用上一步驟創建一個handler創建一個opener
opener=request.build_opener(handler)
# 1.4、使用opener發送登錄請求(人人網得郵箱和密碼)
headers={
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
}
data={
    'email':'2605072149@qq.com',
    'password':'123456'
}
login_url="http://www.renren.com/PLogin.do"
req=request.Request(login_url,data=parse.urlencode(data).encode('utf-8'),headers=headers)
opener.open(req)
# 2、訪問個人主頁
dapeng_url="http://www.renren.com/880151247/profile"
# 獲取個人主頁信息得時候,使用之前得那個opener,因為已經包含了登錄用得信息
resp=opener.open(dapeng_url)
with open("renren.html","w",encoding='utf-8') as fp:
     fp.write(resp.read().decode('utf-8'))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM