當前位置:首頁 » 編程語言 » python模擬登錄

python模擬登錄

發布時間: 2022-01-08 09:54:28

python爬蟲模擬登錄是什麼意思

有些網站需要登錄後才能爬取所需要的信息,此時可以設計爬蟲進行模擬登錄,原理是利用瀏覽器cookie。

一、瀏覽器訪問伺服器的過程:
(1)瀏覽器(客戶端)向Web伺服器發出一個HTTP請求(Http request);
(2)Web伺服器收到請求,發回響應信息(Http Response);
(3)瀏覽器解析內容呈現給用戶。

二、利用Fiddler查看瀏覽器行為信息:

Http請求消息:

(1)起始行:包括請求方法、請求的資源、HTTP協議的版本號

這里GET請求沒有消息主體,因此消息頭後的空白行中沒有其他數據。

(2)消息頭:包含各種屬性

(3)消息頭結束後的空白行

(4)可選的消息體:包含數據

Http響應消息:

(1)起始行:包括HTTP協議版本,http狀態碼和狀態

(2)消息頭:包含各種屬性

(3)消息體:包含數據


可以發現,信息里不僅有帳號(email)和密碼(password),其實還有_xsrf(具體作用往後看)和remember_me(登錄界面的「記住我」)兩個值。

那麼,在python爬蟲中將這些信息同樣發送,就可以模擬登錄。

在發送的信息里出現了一個項:_xsrf,值為

這個項其實是在訪問知乎登錄網頁https://www.hu.com/#signin時,網頁發送過來的信息,在瀏覽器源碼中可見:

所以需要先從登錄網址https://www.hu.com/#signin獲取這個_xsrf的值,

並連同帳號、密碼等信息再POST到真正接收請求的http://www.hu.com/login/email網址。

(2)獲取_xsrf的值:
爬取登錄網址https://www.hu.com/#signin,從內容中獲取_xsrf的值。
正則表達式。

(3)發送請求:
xsrf = 獲取的_xsrf的值
data = {"email":"xxx","password":"xxx","_xsrf":xsrf}
login = s.post(loginURL, data = data, headers = headers)
loginURL:是真正POST到的網址,不一定等同於登錄頁面的網址;

(4)爬取登錄後的網頁:
response = s.get(getURL, cookies = login.cookies, headers = headers)
getURL:要爬取的登陸後的網頁;
login.cookies:登陸時獲取的cookie信息,存儲在login中。

(5)輸出內容:
print response.content

五、具體代碼:

[python]view plain

  • #-*-coding:utf-8-*-

  • #author:Simon

  • #updatetime:2016年3月17日17:35:35

  • #功能:爬蟲之模擬登錄,urllib和requests都用了...

  • importurllib

  • importurllib2

  • importrequests

  • importre

  • headers={'User-Agent':'Mozilla/5.0(WindowsNT6.2)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.12Safari/535.11'}

  • defget_xsrf():

  • firstURL="http://www.hu.com/#signin"

  • request=urllib2.Request(firstURL,headers=headers)

  • response=urllib2.urlopen(request)

  • content=response.read()

  • pattern=re.compile(r'name="_xsrf"value="(.*?)"/>',re.S)

  • _xsrf=re.findall(pattern,content)

  • return_xsrf[0]

  • deflogin(par1):

  • s=requests.session()

  • afterURL="https://www.hu.com/explore"#想要爬取的登錄後的頁面

  • loginURL="http://www.hu.com/login/email"#POST發送到的網址

  • login=s.post(loginURL,data=par1,headers=headers)#發送登錄信息,返回響應信息(包含cookie)

  • response=s.get(afterURL,cookies=login.cookies,headers=headers)#獲得登陸後的響應信息,使用之前的cookie

  • returnresponse.content

  • xsrf=get_xsrf()

  • print"_xsrf的值是:"+xsrf

  • data={"email":"xxx","password":"xxx","_xsrf":xsrf}

  • printlogin(data)

  • 六、補充:

    用知乎網做完試驗,發現這里好像並不需要發送_xsrf這個值。

    不過有的網站在登陸時確實需要發送類似這樣的一個值,可以用上述方法。

❷ 用python實現發送post模擬登陸網站

urllib2 這個模塊可以模擬瀏覽器打開網頁,使用post方式的時候加入你需要post的參數就可以了,
具體的參數你可以看登陸的網站需要post什麼數據,一般網站登陸不外是3個數據:
用戶名,密碼,驗證碼

❸ 用python寫一個程序模擬登陸,不知怎麼寫,請大神指點

importhttplib2
response,content=httplib2.Http().request("guji.artx.cn","GET"header={"cookie":"bdshare_...","User-Agent":"Mozilla/5.0(Windows..."}


請求頭都以dict形式寫在header里就行了。

返回值中,response里主要是狀態碼,等信息,注意裡面的set-cookie欄位。

所以除了js無法實現,你完全可以100%模擬瀏覽器的行為,cookie、ua、referer都可以帶上。

❹ 如何用python模擬登錄jsp網站

簡單說一下流程:先用cookielib獲取cookie,再用獲取到的cookie,進入需要登錄的網站。
01 # -*- coding: utf-8 -*-
02 # !/usr/bin/python
03
04 import urllib2
05 import urllib
06 import cookielib
07 import re
08
09 auth_url = 'http://www.nowamagic.net/'
10 home_url = 'http://www.nowamagic.net/';
11 # 登陸用戶名和密碼
12 data={
13 "username":"nowamagic",
14 "password":"pass"
15 }
16 # urllib進行編碼
17 post_data=urllib.urlencode(data)
18 # 發送頭信息
19 headers ={
20 "Host":"www.nowamagic.net",
21 "Referer": "http://www.nowamagic.net"
22 }
23 # 初始化一個CookieJar來處理Cookie
24 cookieJar=cookielib.CookieJar()
25 # 實例化一個全局opener
26 opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
27 # 獲取cookie
28 req=urllib2.Request(auth_url,post_data,headers)
29 result = opener.open(req)
30 # 訪問主頁 自動帶著cookie信息
31 result = opener.open(home_url)
32 # 顯示結果
33 print result.read()

再附帶幾個示常式序:

1. 使用已有的cookie訪問網站

01 import cookielib, urllib2
02
03 ckjar = cookielib.MozillaCookieJar(os.path.join('C:\Documents and Settings\tom\Application Data\Mozilla\Firefox\Profiles\h5m61j1i.default', 'cookies.txt'))
04
05 req = urllib2.Request(url, postdata, header)
06
07 req.add_header('User-Agent', \
08 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')
09
10 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckjar) )
11
12 f = opener.open(req)
13 htm = f.read()
14 f.close()

2. 訪問網站獲得cookie,並把獲得的cookie保存在cookie文件中

01 import cookielib, urllib2
02
03 req = urllib2.Request(url, postdata, header)
04 req.add_header('User-Agent', \
05 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')
06
07 ckjar = cookielib.MozillaCookieJar(filename)
08 ckproc = urllib2.HTTPCookieProcessor(ckjar)
09
10 opener = urllib2.build_opener(ckproc)
11
12 f = opener.open(req)
13 htm = f.read()
14 f.close()
15
16 ckjar.save(ignore_discard=True, ignore_expires=True)

3. 使用指定的參數生成cookie,並用這個cookie訪問網站

01 import cookielib, urllib2
02
03 cookiejar = cookielib.CookieJar()
04 urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
05 values = {'redirect':", 'email':'[email protected]',
06 'password':'password', 'rememberme':", 'submit':'OK, Let Me In!'}
07 data = urllib.urlencode(values)
08
09 request = urllib2.Request(url, data)
10 url = urlOpener.open(request)
11 print url.info()
12 page = url.read()
13
14 request = urllib2.Request(url)
15 url = urlOpener.open(request)
16 page = url.read()
17 print page

❺ python如何模擬登錄Github

首先進入github登錄頁:https://github.com/login
輸入賬號密碼,打開開發者工具,在Network頁勾選上Preserve Log(顯示持續日誌),點擊登錄,查看Session請求,找到其請求的URL與Form Data、Headers。此時除Cookies與authenticity_token無法直接獲得外,其餘模擬登錄所需參數皆已獲得。
我們進入登錄頁點擊登錄後,瀏覽器會向伺服器發送這些信息,所以這些信息是在登錄頁就已設置好的。所以我們在登錄頁源碼中搜索authenticity_token,果然找到了它的值。在Response-Headers中觀察到有一個set-cookies的欄位,這個就是設置cookies的過程。下面給出代碼示例。
相關推薦:《Python視頻教程》

❻ 怎麼python 模擬網站登錄、注冊

將注冊名和密碼存到字典中,下次登陸時就可以判斷是否對應

❼ python怎麼做模擬登陸手機app

1.這要看個家APP具體實現登錄邏輯
2.大部分登錄方法都是post方法,就用urllib包足以
3.模擬一個請求頭,因為大部分公司都會過濾掉非真實用戶請求
4.攔截抓包,看他們家的協議組成,推薦用

Charles

5.如果他們做了通信簽名,反編譯他們的apk包,尋找對應的加密密鑰。如果做了混淆,我暫時沒做過這塊破解,抱歉。

❽ python http requests 怎麼實現模擬登錄,提交表單

以下實例是一個完整的代碼,實現了從博客獲取內容發布至網路,分別實踐抓取博客內容、模擬登錄、表單提交這幾步;
#注意,以下程序是一個完全程序,如果只需要實現模擬登錄,提交表單,刪除抓取部分即可,相關的代碼已經清楚標注,可以根據自己實際情況修改。
代碼如下:
# -*- coding: utf-8 -*-
import re
import urllib
import urllib2
import cookielib
#第一步,獲取博客標題和正文 ,「IP」可以改為實際地址;
url = "IP"
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
content = re.findall('(?<=blogstory">).*(?=<p class="right artical)', html, re.S)
content = re.findall('<script.*>.*</script>(.*)', content[0], re.S)
title = re.findall('(?<=<title>)(.*)-.* - CSDN.*(?=</title>)', html, re.S)
#根據文章獲取內容新建表單值
blog = {'spBlogTitle': title[0].decode('utf-8').encode('gbk'), #文章標題
'spBlogText': content[0].decode('utf-8').encode('gbk'),#文章內容
'ct': "1",
'cm': "1"}
del content
del title

#第二步,模擬登錄網路;
cj = cookielib.CookieJar()
#登陸網路的用戶名和密碼
post_data = urllib.urlencode({'username': '[username]', 'password': '[password]', 'pwd': '1'})
#登錄地址路徑
path = 'https://passport..com/?login'
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Opera/9.23')]
urllib2.install_opener(opener)
req = urllib2.Request(path, post_data)
conn = urllib2.urlopen(req)

#獲取網路登陸認證令牌
bd = urllib2.urlopen(urllib2.Request('http://hi..com/[username]/creat/blog')).read()
bd = re.findall('(?<=bdstoken\" value=\").*(?=ct)', bd, re.S)
blog['bdstoken'] = bd[0][:32]
#設置分類名
blog['spBlogCatName'] = 'php'
#第四步,比較表單,提交表單;req2 = urllib2.Request('http://hi..com/[username]/commit', urllib.urlencode(blog))
#最後,查看錶單提交後返回內容,檢驗;
print urllib2.urlopen(req2).read()
#注意:將[username]/[password]替換為自己真實用戶名和密碼

❾ python 使用requests模塊, 如何模擬進行登錄並執行之後的操作

以下實例是一個完整的代碼,實現了從博客獲取內容發布至網路,分別實踐抓取博客內容、模擬登錄、表單提交這幾步;
#注意,以下程序是一個完全程序,如果只需要實現模擬登錄,提交表單,刪除抓取部分即可,相關的代碼已經清楚標注,可以根據自己實際情況修改。
代碼如下:
# -*- coding: utf-8 -*-
import re
import urllib
import urllib2
import cookielib
#第一步,獲取博客標題和正文 ,「IP」可以改為實際地址;
url = "IP"
sock = urllib.urlopen(url)
html = sock.read()
sock.close()
content = re.findall('(?<=blogstory">).*(?=<p class="right artical)', html, re.S)
content = re.findall('<script.*>.*</script>(.*)', content[0], re.S)
title = re.findall('(?<=<title>)(.*)-.* - CSDN.*(?=</title>)', html, re.S)
#根據文章獲取內容新建表單值
blog = {'spBlogTitle': title[0].decode('utf-8').encode('gbk'), #文章標題
'spBlogText': content[0].decode('utf-8').encode('gbk'),#文章內容
'ct': "1",
'cm': "1"}
del content
del title

#第二步,模擬登錄網路;
cj = cookielib.CookieJar()
#登陸網路的用戶名和密碼
post_data = urllib.urlencode({'username': '[username]', 'password': '[password]', 'pwd': '1'})
#登錄地址路徑
path = 'https://passport..com/?login'
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('User-agent', 'Opera/9.23')]
urllib2.install_opener(opener)
req = urllib2.Request(path, post_data)
conn = urllib2.urlopen(req)
#獲取網路登陸認證令牌
bd = urllib2.urlopen(urllib2.Request('http://hi..com/[username]/creat/blog')).read()
bd = re.findall('(?<=bdstoken\" value=\").*(?=ct)', bd, re.S)
blog['bdstoken'] = bd[0][:32]
#設置分類名
blog['spBlogCatName'] = 'php'
#第四步,比較表單,提交表單;req2 = urllib2.Request('http://hi..com/[username]/commit', urllib.urlencode(blog))
#最後,查看錶單提交後返回內容,檢驗;
print urllib2.urlopen(req2).read()
#注意:將[username]/[password]替換為自己真實用戶名和密碼

熱點內容
如何提高三星a7安卓版本 發布:2024-09-20 08:42:35 瀏覽:659
如何更換伺服器網站 發布:2024-09-20 08:42:34 瀏覽:306
子彈演算法 發布:2024-09-20 08:41:55 瀏覽:284
手機版網易我的世界伺服器推薦 發布:2024-09-20 08:41:52 瀏覽:812
安卓x7怎麼邊打游戲邊看視頻 發布:2024-09-20 08:41:52 瀏覽:158
sql資料庫安全 發布:2024-09-20 08:31:32 瀏覽:89
蘋果連接id伺服器出錯是怎麼回事 發布:2024-09-20 08:01:07 瀏覽:503
編程鍵是什麼 發布:2024-09-20 07:52:47 瀏覽:653
學考密碼重置要求的證件是什麼 發布:2024-09-20 07:19:46 瀏覽:477
電腦主伺服器怎麼開機 發布:2024-09-20 07:19:07 瀏覽:728