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

模擬登錄python

發布時間: 2023-06-13 20:07:54

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怎麼做模擬登陸手機app

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

Charles

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

Ⅲ python獲取cookie後怎麼模擬登陸網站

運行平台:Windows

Python版本:Python3.x

IDE:Sublime text3

一、為什麼要使用Cookie

Cookie,指某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。
比如說有些網站需要登錄後才能訪問某個頁面,在登錄之前,你想抓取某個頁面內容,登陸前與登陸後是不同的,或者不允許的。
使用Cookie和使用代理IP一樣,也需要創建一個自己的opener。在HTTP包中,提供了cookiejar模塊,用於提供對Cookie的支持。

三、總結

獲取成功!如果看過之前的筆記內容,我想這些代碼應該很好理解吧。

Ⅳ Python Request庫模擬登錄

1.讀取本地用戶文件,或者賬號名和密碼昌耐正耐悔
2.使用md5對用戶密碼進行加密
3.獲取session的臨時隨機串及sessionid
4.對隨機串及用戶密碼進行二次md5加密生成新的請求秘鑰串
5.傳遞用戶名、新的秘鑰串及sessionid模擬用戶登錄畝基

Ⅳ 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設計一個爬蟲模擬登陸知乎

給你一個例子,可以看看:

import requests
import time
import json
import os
import re
import sys
import subprocess
from bs4 import BeautifulSoup as BS

class ZhiHuClient(object):

"""連接知乎的工具類,維護一個Session
2015.11.11

用法:

client = ZhiHuClient()

# 第一次使用時需要調用此方法登錄一次,生成cookie文件
# 以後可以跳過這一步
client.login("username", "password")

# 用這個session進行其他網路操作,詳見requests庫
session = client.getSession()
"""

# 網址參數是賬號類型
TYPE_PHONE_NUM = "phone_num"
TYPE_EMAIL = "email"
loginURL = r"http://www.hu.com/login/{0}"
homeURL = r"http://www.hu.com"
captchaURL = r"http://www.hu.com/captcha.gif"

headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate",
"Host": "www.hu.com",
"Upgrade-Insecure-Requests": "1",
}

captchaFile = os.path.join(sys.path[0], "captcha.gif")
cookieFile = os.path.join(sys.path[0], "cookie")

def __init__(self):
os.chdir(sys.path[0]) # 設置腳本所在目錄為當前工作目錄

self.__session = requests.Session()
self.__session.headers = self.headers # 用self調用類變數是防止將來類改名
# 若已經有 cookie 則直接登錄
self.__cookie = self.__loadCookie()
if self.__cookie:
print("檢測到cookie文件,直接使用cookie登錄")
self.__session.cookies.update(self.__cookie)
soup = BS(self.open(r"http://www.hu.com/").text, "html.parser")
print("已登陸賬號: %s" % soup.find("span", class_="name").getText())
else:
print("沒有找到cookie文件,請調用login方法登錄一次!")

# 登錄
def login(self, username, password):
"""
驗證碼錯誤返回:
{'errcode': 1991829, 'r': 1, 'data': {'captcha': '請提交正確的驗證碼 :('}, 'msg': '請提交正確的驗證碼 :('}
登錄成功返回:
{'r': 0, 'msg': '登陸成功'}
"""
self.__username = username
self.__password = password
self.__loginURL = self.loginURL.format(self.__getUsernameType())
# 隨便開個網頁,獲取登陸所需的_xsrf
html = self.open(self.homeURL).text
soup = BS(html, "html.parser")
_xsrf = soup.find("input", {"name": "_xsrf"})["value"]
# 下載驗證碼圖片
while True:
captcha = self.open(self.captchaURL).content
with open(self.captchaFile, "wb") as output:
output.write(captcha)
# 人眼識別
print("=" * 50)
print("已打開驗證碼圖片,請識別!")
subprocess.call(self.captchaFile, shell=True)
captcha = input("請輸入驗證碼:")
os.remove(self.captchaFile)
# 發送POST請求
data = {
"_xsrf": _xsrf,
"password": self.__password,
"remember_me": "true",
self.__getUsernameType(): self.__username,
"captcha": captcha
}
res = self.__session.post(self.__loginURL, data=data)
print("=" * 50)
# print(res.text) # 輸出腳本信息,調試用
if res.json()["r"] == 0:
print("登錄成功")
self.__saveCookie()
break
else:
print("登錄失敗")
print("錯誤信息 --->", res.json()["msg"])

def __getUsernameType(self):
"""判斷用戶名類型
經測試,網頁的判斷規則是純數字為phone_num,其他為email
"""
if self.__username.isdigit():
return self.TYPE_PHONE_NUM
return self.TYPE_EMAIL

def __saveCookie(self):
"""cookies 序列化到文件
即把dict對象轉化成字元串保存
"""
with open(self.cookieFile, "w") as output:
cookies = self.__session.cookies.get_dict()
json.mp(cookies, output)
print("=" * 50)
print("已在同目錄下生成cookie文件:", self.cookieFile)

def __loadCookie(self):
"""讀取cookie文件,返回反序列化後的dict對象,沒有則返回None"""
if os.path.exists(self.cookieFile):
print("=" * 50)
with open(self.cookieFile, "r") as f:
cookie = json.load(f)
return cookie
return None

def open(self, url, delay=0, timeout=10):
"""打開網頁,返回Response對象"""
if delay:
time.sleep(delay)
return self.__session.get(url, timeout=timeout)

def getSession(self):
return self.__session

if __name__ == '__main__':
client = ZhiHuClient()

# 第一次使用時需要調用此方法登錄一次,生成cookie文件
# 以後可以跳過這一步
# client.login("username", "password")

# 用這個session進行其他網路操作,詳見requests庫
session = client.getSession()

Ⅶ 如何用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

熱點內容
c語言矩陣的轉置 發布:2025-02-13 02:38:43 瀏覽:624
rowphp 發布:2025-02-13 02:37:16 瀏覽:711
光遇安卓服周年傘在哪裡領取 發布:2025-02-13 02:22:18 瀏覽:674
寫mv腳本軟體 發布:2025-02-13 02:21:56 瀏覽:696
超內核源碼 發布:2025-02-13 02:12:54 瀏覽:444
趣粉腳本 發布:2025-02-13 02:11:23 瀏覽:952
壓縮的茶葉怎麼弄開 發布:2025-02-13 02:11:16 瀏覽:739
n1ftp伺服器 發布:2025-02-13 02:10:39 瀏覽:348
沒有卡沒有密碼怎麼辦啊 發布:2025-02-13 01:51:53 瀏覽:461
linux2個ftp伺服器 發布:2025-02-13 01:44:31 瀏覽:15