1. 程式人生 > 實用技巧 >Python爬蟲對於圖片驗證碼自動識別的實現及模擬會話登陸!

Python爬蟲對於圖片驗證碼自動識別的實現及模擬會話登陸!

一、圖片驗證碼識別

驗證碼識別所使用的api為為快速圖片識別平臺,網頁地址為http://fast.95man.com/auth/main.html,在這個平臺中我們需要先依據使用者名稱和密碼獲取到token

# 獲取access_token
username = '746074xxx'
password = '746074xxxxxx'
acc_url = 'http://api.95man.com:8888/api/Http/UserTaken?user=' + str(username) + '&pwd=' + str(password) + '&isref=0'
response = requests.get(acc_url, headers=headers)
token = response.text[2:]

獲取到token後可對圖片驗證碼進行識別

# 識別驗證碼
img_orc_url = "http://api.95man.com:8888/api/Http/Recog?Taken=" + str(token) + "&imgtype=1&len=null"
orc_data = {
    'ImgBase64': img
}
response = requests.post(img_orc_url, headers=headers, data=orc_data)
verify = (response.text)[7:-2]

其中img變數是base64進行編碼後的值,所得到的驗證碼的值即verify的值

# .content是把圖片轉化成二進位制的方式
src_img = requests.get(src_img_path, headers=headers).content
with open("./src.jpg", 'wb') as fp:
    fp.write(src_img)
f = open("./src.jpg", "rb")
# 進行編碼
img = base64.b64encode(f.read())

二、模擬登陸

# 登陸
# 僅僅測試,這裡的url需要改變為登陸的url地址
login_url = "https://www.baidu.com"
data = {
    '__VIEWSTATE': 'dDwtMTM0OTIyMDA2Nzs7PpguLPJ2z3Assui2H2EuHO7sboJy',
    'txtUserName': '20160201996',
    'TextBox2': '746074xxx',
    'txtSecretCode': verify,
    'RadioButtonList1': '',
    'Button1': '',
    'lbLanguage': '',
    'hidPdrs': '',
    'hidsc': '',
}
# 這裡開啟會話後會一直攜帶cookie
# 開啟會話
session = requests.Session()
# 設定會話的headers
session.headers = headers
login_response = session.post(url, data=data, timeout=500)

# 這裡的意思是登入後再在登入頁面繼續進行其他操作,這樣可以讓伺服器知道你是一家登入成功了的
# 登陸詳細地址
detail_url = 'https://www.baidu.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
}
detail_page = session.get(detail_url, headers=headers, timeout=500, allow_redirects=True)
print(detail_page.text)