Python 爬蟲(chóng)模擬登陸知乎
在之前寫過(guò)一篇使用python爬蟲(chóng)爬取電影天堂資源的文章,重點(diǎn)是如何解析頁(yè)面和提高爬蟲(chóng)的效率。由于電影天堂上的資源獲取權(quán)限是所有人都一樣的,所以不需要進(jìn)行登錄驗(yàn)證操作,寫完那篇文章后又花了些時(shí)間研究了一下python模擬登陸,網(wǎng)上關(guān)于這部分的資料很多,很多demo都是登陸知乎的,原因是知乎的登陸比較簡(jiǎn)單,只需要post幾個(gè)參數(shù),保存cookie。而且還沒(méi)有進(jìn)行加密,很適合用來(lái)做教學(xué)。我也是是新手,一點(diǎn)點(diǎn)的摸索終于成功登陸上了知乎。就通過(guò)這篇文章分享一下學(xué)習(xí)這部分的心得,希望對(duì)那些和我一樣的初學(xué)者有所幫助。
先來(lái)說(shuō)一下,爬蟲(chóng)模擬登陸的基本原理吧,我也是剛開(kāi)始接觸對(duì)于一些深層次的東西也不是掌握的很清楚。首先比較重要的一個(gè)概念就是cookie,我們都知道HTTP是一種無(wú)狀態(tài)的協(xié)議,也就是說(shuō)當(dāng)一個(gè)瀏覽器客戶端向服務(wù)器提交一個(gè)request,服務(wù)器回應(yīng)一個(gè)response后,他們之間的聯(lián)系就中斷了。這樣就導(dǎo)致了這個(gè)客戶端在向服務(wù)器發(fā)送請(qǐng)求時(shí),服務(wù)器無(wú)法判別這兩個(gè)客戶端是不是一個(gè)了。這樣肯定是不行的。這時(shí)cookie的作用就體現(xiàn)出來(lái)了。當(dāng)客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求后,服務(wù)器會(huì)給它分配一個(gè)標(biāo)識(shí)(cookie),并保存到客戶端本地,當(dāng)下次該客戶端再次發(fā)送請(qǐng)求時(shí)連帶著cookie一并發(fā)送給服務(wù)器,服務(wù)器一看到cookie,啊原來(lái)是你呀,這是你的東西,拿走吧。所以一個(gè)爬蟲(chóng)模擬登陸就是要要做到模擬一個(gè)瀏覽器客戶端的行為,首先將你的基本登錄信息發(fā)送給指定的url,服務(wù)器驗(yàn)證成功后會(huì)返回一個(gè)cookie,我們就利用這個(gè)cookie進(jìn)行后續(xù)的爬取工作就行了。
我這里抓包用的就是chrome的開(kāi)發(fā)者工具,不過(guò)你也可以使用Fiddler、Firebug等都可以,只不過(guò)作為一名前端er對(duì)chrome有一種特殊的喜愛(ài)之情。準(zhǔn)備好工具接下來(lái)就要打開(kāi)知乎的登陸頁(yè)面并查看https://www.zhihu.com/#signin 我們可以很容易發(fā)現(xiàn)這個(gè)請(qǐng)求 發(fā)送的就是登錄信息,當(dāng)然我使用手機(jī)登陸的 用郵件登陸的是最后結(jié)尾是email

所以我們只需要向這個(gè)地址post數(shù)據(jù)就行了

phone_num 登錄名
password 密碼
captcha_type 驗(yàn)證碼類型(這個(gè)參數(shù)著這里并沒(méi)有實(shí)質(zhì)作用)
rember_me 記住密碼
_xsrf 一個(gè)隱藏的表單元素 知乎用來(lái)防御CSRF的(關(guān)于CSRF請(qǐng)打開(kāi)這里) 我發(fā)現(xiàn)這個(gè)值是固定所以就在這里直接寫死了 若果有興趣的同學(xué)可以寫一個(gè)正則表達(dá)式 把這部分的值提取出來(lái) 這樣更嚴(yán)謹(jǐn)一些。
# -*- coding:utf-8 -*-
import urllib2
import urllib
import cookielib
posturl = 'https://www.zhihu.com/login/phone_num'
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/52.0.2743.116 Safari/537.36',
'Referer':'https://www.zhihu.com/'
}
value = {
'password':'*****************',
'remember_me':True,
'phone_num':'*******************',
'_xsrf':'**********************'
}
data=urllib.urlencode(value)
#初始化一個(gè)CookieJar來(lái)處理Cookie
cookieJar=cookielib.CookieJar()
cookie_support = urllib2.HTTPCookieProcessor(cookieJar)
#實(shí)例化一個(gè)全局opener
opener=urllib2.build_opener(cookie_support)
request = urllib2.Request(posturl, data, headers)
result=opener.open(request)
print result.read()
當(dāng)你看到服務(wù)器返回這個(gè)信息的時(shí)候就說(shuō)明你登陸成功了
{"r":0,
"msg": "\u767b\u5f55\u6210\u529f"
}#翻譯過(guò)來(lái)就是 “登陸成功” 四個(gè)大字
然后你就可以用這個(gè)身份去抓取知乎上的頁(yè)面了
page=opener.open("https://www.zhihu.com/people/yu-yi-56-70")
content = page.read().decode('utf-8')
print(content)
這段代碼就是通過(guò)實(shí)例化一個(gè)opener對(duì)象保存成功登陸后的cookie信息,然后再通過(guò)這個(gè)opener帶著這個(gè)cookie去訪問(wèn)服務(wù)器上關(guān)于這個(gè)身份的完整頁(yè)面。更復(fù)雜的比如微博的登陸這種對(duì)請(qǐng)求的數(shù)據(jù)進(jìn)行加密了的后面有時(shí)間再寫出來(lái),與大家分享
- 如何使用python爬蟲(chóng)爬取要登陸的網(wǎng)站
- Python爬蟲(chóng)利用cookie實(shí)現(xiàn)模擬登陸實(shí)例詳解
- Python使用Srapy框架爬蟲(chóng)模擬登陸并抓取知乎內(nèi)容
- python模擬新浪微博登陸功能(新浪微博爬蟲(chóng))
- python爬蟲(chóng)之驗(yàn)證碼篇3-滑動(dòng)驗(yàn)證碼識(shí)別技術(shù)
- python爬蟲(chóng)之自動(dòng)登錄與驗(yàn)證碼識(shí)別
- Python爬蟲(chóng)模擬登錄帶驗(yàn)證碼網(wǎng)站
- Python爬蟲(chóng)實(shí)現(xiàn)Cookie模擬登錄
- Python爬蟲(chóng)模擬登陸嗶哩嗶哩(bilibili)并突破點(diǎn)選驗(yàn)證碼功能
相關(guān)文章
OpenCV實(shí)現(xiàn)圖像平滑處理的方法匯總
這篇文章為大家詳細(xì)介紹了在圖像上面進(jìn)行了圖像均值濾波、方框?yàn)V波 、高斯濾波、中值濾波、雙邊濾波、2D卷積等具體操作的方法,需要的可以參考一下2023-02-02
詳解pytest分布式執(zhí)行插件?pytest-xdist?的高級(jí)用法
這篇文章主要介紹了pytest分布式執(zhí)行插件?pytest-xdist?的高級(jí)用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
Python中Django與Echarts的結(jié)合用法圖文詳解
ECharts是一個(gè)第三方控件,下面這篇文章主要給大家介紹了關(guān)于Python中Django與Echarts的結(jié)合用法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
Python使用JSON庫(kù)解析JSON數(shù)據(jù)的方法
這篇文章主要介紹了Python使用JSON庫(kù)解析JSON數(shù)據(jù),主要包括如何在網(wǎng)頁(yè)中獲取json數(shù)據(jù)及python內(nèi)置的json庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
Selenium啟動(dòng)Chrome時(shí)配置選項(xiàng)詳解
這篇文章主要介紹了Selenium啟動(dòng)Chrome時(shí)配置選項(xiàng)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Python自動(dòng)調(diào)用IE打開(kāi)某個(gè)網(wǎng)站的方法
這篇文章主要介紹了Python自動(dòng)調(diào)用IE打開(kāi)某個(gè)網(wǎng)站的方法,涉及Python調(diào)用系統(tǒng)win32組件的相關(guān)技巧,需要的朋友可以參考下2015-06-06

