什么是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'))