基於requests 簡單的豆瓣網平臺自動打碼登入
阿新 • • 發佈:2018-11-17
1.對攜帶驗證碼頁面進行獲取
2.解析下載到本地(有的網站並不是img格式不能直接下載)要解析
案例基於 打碼平臺 www.yundama.com
獲取頁面上的圖片並儲存到本地
import requests
import re
from lxml import etree # 利用xpath解析
def get_img(img_file_name):
url = 'https://www.douban.com/accounts/login?source=movie'
data = requests.get(url= url, headers=headers).text
# 將頁面資料中驗證碼解析,驗證碼下載到本地
tree = etree.HTML(data)
# Xpath表示式 定位到該標籤返回列表取第一個[0]取到圖片url
codeImg_url = tree.xpath('//*[@id="captcha_image"]/@src')[0] # 如果沒有驗證碼就會報錯下標出錯
# 對圖片請求,content取圖片二進位制資料值
code_img = requests.get(url=codeImg_url, headers=headers).content
# 儲存目錄
with open('./%s' % img_file_name, 'wb') as f:
f.write(code_img)
return data # 返回頁面資料,便於獲取驗證碼id
三方打碼平臺獲取驗證碼
from yunDaMa import YDMHttp # 匯入下載的模組
def get_code(img):
"""三方平臺獲取驗證碼"""
dm = YDMHttp(
username='wkunzhi',
password='901130',
appid=6190,
appkey= 'd2d65c13c4e6870ba9d4e4a71e39bf95',
)
print('餘額: %s' % dm.balance())
filename = img
# 驗證碼型別,查詢http://www.yundama.com/price.html
codetype = 5000
# 超時時間,秒
timeout = 20
# 開始識別
cid, result = dm.decode(filename, codetype, timeout)
print('驗證碼:', result)
return result
img_file = 'code.png'
name = '[email protected]'
pwd = 'xxxxx'
login(name, pwd)
通過檢視頁面得知 登入時候還要傳一個碼id,所以要獲取後一起提交
def get_codeId(data):
# < img id = "captcha_image" src = "https://www.douban.com/misc/captcha?id=0IwEZZYmlvrgPJuVu5mjSXUP:en&size=s" alt = "captcha" class ="captcha_image" >
code_id = re.findall('<img id="captcha_image".*?id=(.*?)&.*?>', data, re.S)[0]
print(code_id)
return code_id