国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python 爬蟲模擬登陸知乎

2019-11-25 16:32:29
字體:
供稿:網(wǎng)友

在之前寫過一篇使用python爬蟲爬取電影天堂資源的文章,重點是如何解析頁面和提高爬蟲的效率。由于電影天堂上的資源獲取權(quán)限是所有人都一樣的,所以不需要進行登錄驗證操作,寫完那篇文章后又花了些時間研究了一下python模擬登陸,網(wǎng)上關(guān)于這部分的資料很多,很多demo都是登陸知乎的,原因是知乎的登陸比較簡單,只需要post幾個參數(shù),保存cookie。而且還沒有進行加密,很適合用來做教學(xué)。我也是是新手,一點點的摸索終于成功登陸上了知乎。就通過這篇文章分享一下學(xué)習(xí)這部分的心得,希望對那些和我一樣的初學(xué)者有所幫助。

  先來說一下,爬蟲模擬登陸的基本原理吧,我也是剛開始接觸對于一些深層次的東西也不是掌握的很清楚。首先比較重要的一個概念就是cookie,我們都知道HTTP是一種無狀態(tài)的協(xié)議,也就是說當(dāng)一個瀏覽器客戶端向服務(wù)器提交一個request,服務(wù)器回應(yīng)一個response后,他們之間的聯(lián)系就中斷了。這樣就導(dǎo)致了這個客戶端在向服務(wù)器發(fā)送請求時,服務(wù)器無法判別這兩個客戶端是不是一個了。這樣肯定是不行的。這時cookie的作用就體現(xiàn)出來了。當(dāng)客戶端向服務(wù)器發(fā)送一個請求后,服務(wù)器會給它分配一個標(biāo)識(cookie),并保存到客戶端本地,當(dāng)下次該客戶端再次發(fā)送請求時連帶著cookie一并發(fā)送給服務(wù)器,服務(wù)器一看到cookie,啊原來是你呀,這是你的東西,拿走吧。所以一個爬蟲模擬登陸就是要要做到模擬一個瀏覽器客戶端的行為,首先將你的基本登錄信息發(fā)送給指定的url,服務(wù)器驗證成功后會返回一個cookie,我們就利用這個cookie進行后續(xù)的爬取工作就行了。

   我這里抓包用的就是chrome的開發(fā)者工具,不過你也可以使用Fiddler、Firebug等都可以,只不過作為一名前端er對chrome有一種特殊的喜愛之情。準(zhǔn)備好工具接下來就要打開知乎的登陸頁面并查看https://www.zhihu.com/#signin 我們可以很容易發(fā)現(xiàn)這個請求 發(fā)送的就是登錄信息,當(dāng)然我使用手機登陸的 用郵件登陸的是最后結(jié)尾是email

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

phone_num 登錄名
password 密碼
captcha_type 驗證碼類型(這個參數(shù)著這里并沒有實質(zhì)作用)
rember_me 記住密碼

_xsrf 一個隱藏的表單元素 知乎用來防御CSRF的(關(guān)于CSRF請打開這里) 我發(fā)現(xiàn)這個值是固定所以就在這里直接寫死了 若果有興趣的同學(xué)可以寫一個正則表達式 把這部分的值提取出來 這樣更嚴(yán)謹一些。

# -*- coding:utf-8 -*-import urllib2import urllibimport cookielibposturl = '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)#初始化一個CookieJar來處理CookiecookieJar=cookielib.CookieJar()cookie_support = urllib2.HTTPCookieProcessor(cookieJar)#實例化一個全局openeropener=urllib2.build_opener(cookie_support)request = urllib2.Request(posturl, data, headers)result=opener.open(request)print result.read()

當(dāng)你看到服務(wù)器返回這個信息的時候就說明你登陸成功了

{"r":0,"msg": "/u767b/u5f55/u6210/u529f"}#翻譯過來就是 “登陸成功” 四個大字

然后你就可以用這個身份去抓取知乎上的頁面了

page=opener.open("https://www.zhihu.com/people/yu-yi-56-70")content = page.read().decode('utf-8')print(content)

這段代碼就是通過實例化一個opener對象保存成功登陸后的cookie信息,然后再通過這個opener帶著這個cookie去訪問服務(wù)器上關(guān)于這個身份的完整頁面。更復(fù)雜的比如微博的登陸這種對請求的數(shù)據(jù)進行加密了的后面有時間再寫出來,與大家分享

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 贡觉县| 高唐县| 金平| 饶阳县| 都江堰市| 额敏县| 彰化县| 宜春市| 高青县| 邵东县| 盐池县| 南开区| 大宁县| 榆中县| 浦县| 连江县| 平陆县| 宁晋县| 龙门县| 营口市| 开阳县| 廊坊市| 奉节县| 南宫市| 延吉市| 开封市| 定边县| 邢台县| 循化| 登封市| 元氏县| 太保市| 亚东县| 深水埗区| 元氏县| 梧州市| 卓尼县| 安陆市| 永丰县| 盐源县| 广宗县|