1. 程式人生 > >基於requests 簡單的豆瓣網平臺自動打碼登入

基於requests 簡單的豆瓣網平臺自動打碼登入

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&amp;size=s" alt = "captcha" class ="captcha_image" >
    code_id = re.findall('<img id="captcha_image".*?id=(.*?)&amp.*?>', data, re.S)[0]
    print(code_id)
    return code_id

後續登入程式碼就不列舉出來了,需要根據自己的使用者名稱和密碼提交