1. 程式人生 > >若快打碼平臺python開發文件修改版

若快打碼平臺python開發文件修改版

一、打碼的作用

  在進行爬蟲過程中,部分網站的登入驗證碼是比較簡單的,例如四個英文數字隨機組合而成的驗證碼,有的是全數字隨機組成的驗證碼,有的是全中文隨機組成的驗證碼。為了爬蟲進行自動化,需要解決自動登入的問題,而驗證碼問題成了第一道坎。起初想到用百度AI的影象識別技術進行識別,但識別結果卻很差,最後還是想起用打碼平臺來解決吧。打碼平臺的識別率算起來還是比較高的,所有花錢還是能辦事的。

二、若快打碼原python開發文件

  在若快官網下載的python文件我覺得寫得過於臃腫,但開發思想(面向物件程式設計)還是值得肯定的,但有時候能簡即簡,畢竟我們只是為了獲取識別結果而已。原開發文件程式碼如下:

 1 #!/usr/bin/env python
 2 # coding:utf-8
 3 
 4 import requests
 5 from hashlib import md5
 6 
 7 
 8 class RClient(object):
 9 
10     def __init__(self, username, password, soft_id, soft_key):
11         self.username = username
12         self.password = md5(password.encode('utf-8').hexdigest()
13 self.soft_id = soft_id 14 self.soft_key = soft_key 15 self.base_params = { 16 'username': self.username, 17 'password': self.password, 18 'softid': self.soft_id, 19 'softkey': self.soft_key, 20 } 21 self.headers = {
22 'Connection': 'Keep-Alive', 23 'Expect': '100-continue', 24 'User-Agent': 'ben', 25 } 26 27 def rk_create(self, im, im_type, timeout=60): 28 """ 29 im: 圖片位元組 30 im_type: 題目型別 31 """ 32 params = { 33 'typeid': im_type, 34 'timeout': timeout, 35 } 36 params.update(self.base_params) 37 files = {'image': ('a.jpg', im)} 38 r = requests.post('http://api.ruokuai.com/create.json', data=params, files=files, headers=self.headers) 39 return r.json() 40 41 def rk_report_error(self, im_id): 42 """ 43 im_id:報錯題目的ID 44 """ 45 params = { 46 'id': im_id, 47 } 48 params.update(self.base_params) 49 r = requests.post('http://api.ruokuai.com/reporterror.json', data=params, headers=self.headers) 50 return r.json() 51 52 53 if __name__ == '__main__': 54 rc = RClient('普通使用者賬號', '普通使用者賬號密碼', '軟體ID', '軟體key') 55 im = open('a.jpg', 'rb').read() 56 print(rc.rk_create(im, 3040)['Result'])

下載他們的開發文件程式碼後研讀了一遍發現還有錯誤的,就是在進行使用者密碼md5加密時候竟然沒有二進位制化!!!罷了,可能是壓根就沒測這文件,自己弄吧還是。。。

三、官方文件修改版

  官方文件寫的真是太難受了,最後還是修改一下,程式碼如下:

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
from hashlib import md5


def get_code_text(file_name, img_type):
    """
    獲取驗證碼
    :param file_name: 驗證碼本地圖片的路徑
    :param img_type: 要識別的驗證碼型別
    :return: 識別後的驗證碼
    """

    headers = {
        'Connection': 'Keep-Alive',
        'Expect': '100-continue',
        'User-Agent': 'ben',
    }
    params = {
        'username': '普通使用者賬號',
        'password': md5('普通使用者賬號密碼'.encode('utf8')).hexdigest(),
        'softid': '120055',
        'softkey': '6b4977398eb94ddeb0f733e18982042f',
        'typeid': img_type,
        'timeout': 30,
    }
    with open(file_name, 'rb') as f:
        content = f.read()
    files = {'image': (file_name, content)}
    res = requests.post('http://api.ruokuai.com/create.json', data=params,
                        files=files, headers=headers)
    return res.json()['Result']