一、打碼的作用 在進行爬蟲過程中,部分網站的登錄驗證碼是比較簡單的,例如四個英文數字隨機組合而成的驗證碼,有的是全數字隨機組成的驗證碼,有的是全中文隨機組成的驗證碼。為了爬蟲進行自動化,需要解決自動登錄的問題,而驗證碼問題成了第一道坎。起初想到用百度AI的圖像識別技術進行識別,但識別結果卻很差,最後 ...
一、打碼的作用
在進行爬蟲過程中,部分網站的登錄驗證碼是比較簡單的,例如四個英文數字隨機組合而成的驗證碼,有的是全數字隨機組成的驗證碼,有的是全中文隨機組成的驗證碼。為了爬蟲進行自動化,需要解決自動登錄的問題,而驗證碼問題成了第一道坎。起初想到用百度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']