大家經常會用python進行網路爬蟲,但是有些**是需要登陸才能看到內容的,那怎麼用python實現模擬登陸呢?主要有三種方式。
原理:cookie儲存在發起請求的客戶端中,伺服器利用cookie來區分不同的客戶端,因為http是一種無狀態的連線,當伺服器一下子收到多個請求是無法判斷哪些請求是同乙個客戶端發起的,而訪問登陸後才看到的頁面這一行為,恰恰需要向伺服器證明是剛才登陸過的那個客戶端。於是就需要cookie來標識客戶端的身份以儲存登陸資訊,這意味著只要得到別的登陸客戶端的cookie,我們能夠冒充他來和伺服器對話,我們用瀏覽器登陸,使用開發者工具看cookie,接著在程式中攜帶該cookie向**傳送請求就能讓程式假扮成登陸的那個瀏覽器,得到只有登陸才能看到的狀態。
具體步驟:開啟瀏覽器登陸,再開啟開發者工具,轉到network選項卡。在左邊的name一欄找到當前**(一般的在doc可以快速找到)選擇右邊的header卡裡面查詢request headers,這裡包含了該**頒發給瀏覽器的cookie,複製下來
實現該方法的python**有兩種,第一種是直接在headers請求頭加入cookie鍵值對,第二個是將cookie分割,放入自身的cookie中
對於第一種實現**:
# -*- coding: utf-8 -*-
"""created on fri jul 27 18:31:43 2018
@author: njuer
"""import requests
url=''
header=
infor=requests.get(url,headers=header)
print(infor.text)
####執行結果顯示出我們登陸後的**的源**
對於第二種實現**:
# -*- coding: utf-8 -*-
"""created on fri jul 27 18:31:43 2018
@author: njuer
"""import requests
url=''
header=
infor=requests.get(url,headers=header)
print(infor.text)
####執行結果顯示出我們登陸後的**的源**
方法二:模擬登陸後利用session保持登陸狀態
原理:session是會話的意思,簡單理解就是,將每乙個客戶端和伺服器的互動當做每個會話,既然在同一會話,既然在同一會話中,伺服器自然知道這個客戶端是否登陸過
具體步驟:1、找出表單提交到頁面:利用瀏覽器開發者工具,轉到network選項,並勾選preserve log(重要),在瀏覽器登陸**,然後在左邊的name一欄找到表單提交頁面,首先,在general那一段,request method 應當是post,其次最下方應該有一段叫做formdata 裡面可以找到剛才我們輸入的使用者名稱和密碼等,注意:提交表單的頁面一般不是提交表單的頁面。
2、找出要提交的資料,包括使用者名稱和密碼
**實現:
def identification(file) : ####識別驗證碼,該程式識別效果不好,有條件可以利用打碼平台識別
image=image.open(file)
image=image.convert('l')
threshold=127
table=
for i in range (256) :
if i< threshold:
else :
image=image.point(table,'1')
image.show()
result=tesserocr.image_to_text(image).split('\n')[0]
print(result)
return result
def logon(result):
form=
session.post('',data=form)
infor=session.get('')
print(infor.text)
photo_file=verification_url(url)
result=identification(photo_file)
logon(result)
###結果與第一種方法相同
第三種:使用selenium登陸,該方法相對來說簡單,只需要定位到賬號,密碼,驗證碼的輸入框,然後在裡面對應填上相關資訊即可。還是那句老話,效率不高,特別一開始利用selenium開啟網頁,但是能夠應對很多**。詳細**就不放進來了,網上也有很多利用selenium登陸的教程。
有人可能想試試這些**的可能說了,這人是不是傻啊,前面設定cookie已經過期了,我們也登陸不上,利用session維持會話的不給賬號密碼,我們怎麼實踐,首先,我想說的是我們在爬蟲的時候學的是思路,主要是思路,其次為了個人隱私,這是私人究生官網賬號,有些東西不便於放出來,這裡可能有人會問為什麼不用普通的**,我們都可以申請的賬號和密碼的**,比如豆瓣,微博等等,因為豆瓣需要驗證碼,而上面的驗證碼識別程式不能夠正確的識別,所以我在本節中沒有使用。最後預告一下,下一節部落格,我將會利用打碼平台破解驗證碼,然後利用session實現登陸豆瓣。
Python 模擬登陸
主要講述賬號密碼登陸,cookie登陸,3.cookie cookie 是伺服器對每個請求使用者的標識,伺服器可以通過cookie判斷請求使用者是不是同乙個人,經常我們登入 時,登陸成功以後我們關閉頁面,我們再次去進入這個頁面,已經是登入狀態了。cookie也有時效性,一定時間以後cookie就會失...
Python模擬登陸
這裡用知乎 www.zhihu.com 來測試的python的模擬登陸操作 首先用firefox和fiddler來攔截所有對知乎的請求,包括進入登陸的頁面的url www.zhihu.com signin 和登陸的url www.zhihu.com login phone num 檢視頁面的源 需要...
普通python模擬登陸
usr bin python import htmlparser import urlparse import urllib import urllib2 import cookielib import string import re 登入的主頁面 hosturl post資料接收和處理的頁面 我...