超级鹰搞定验证码
在进行爬虫抓取的时候遇到验证码怎么办? 这个问题其实一直都很蛋疼. 怎么解决呢?
- 自己想办法写一套深度学习算法. 有针对的去学习各种验证码的识别方案
- 使用互联网上已经相对成熟的产品进行验证码识别.
理性告诉我, 方案二更适合我.
这里推荐各位可以用超级鹰来做测试. 不同的平台使用的算法可能是不一样的. 但是调用方案几乎都差不太多.
我们来看看超级鹰怎么用. 首先, 登录超级鹰的官网. 然后需要注册. 注册后, 需要我们进入用户中心. 生成一个新的软件ID就可以用了



注意这个号, 后面会用到.
然后我们回到超级鹰的官网. 找到测试代码. 找到python的测试代码, 下载. 丢到pycharm里


下载好的内容解压. 丢到pycharm中.


最后, 测试一下

识别效果还是不错的.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
import requests from hashlib import md5
class Chaojiying_Client(object):
def __init__(self, username, password, soft_id): self.username = username password = password.encode('utf8') self.password = md5(password).hexdigest() self.soft_id = soft_id self.base_params = { 'user': self.username, 'pass2': self.password, 'softid': self.soft_id, } self.headers = { 'Connection': 'Keep-Alive', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)', }
def PostPic(self, im, codetype): """ im: 图片字节 codetype: 题目类型 参考 http://www.chaojiying.com/price.html """ params = { 'codetype': codetype, } params.update(self.base_params) files = {'userfile': ('ccc.jpg', im)} r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers) return r.json()
def ReportError(self, im_id): """ im_id:报错题目的图片ID """ params = { 'id': im_id, } params.update(self.base_params) r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers) return r.json()
if __name__ == '__main__': chaojiying = Chaojiying_Client('18614075987', '6035945', '912488') im = open('a.jpg', 'rb').read() print(chaojiying.PostPic(im, 1902))
|
如果遇到的验证码比较特殊. 可以更换代码中的1902位置的参数值. 具体情况可以参考官网上给出的参数列表

需要哪个填哪个就行.
各位可以自行做个测试. 用超级鹰来破解超级鹰的登录验证码~~ 相信会很有意思.
超级鹰干超级鹰
本小节, 我们用超级鹰来破解超级鹰的验证码. 看看效果如何~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| from selenium.webdriver import Chrome from chaojiying import Chaojiying_Client import time
web = Chrome() web.get("http://www.chaojiying.com/user/login/")
code_img = web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/div/img') png_code_img = code_img.screenshot_as_png
chaojiying = Chaojiying_Client('18614075987', '6035945', '912488') result = chaojiying.PostPic(png_code_img, 1902)
web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input').send_keys('18614075987') web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input').send_keys('6035945') web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[3]/input').send_keys(result['pic_str']) time.sleep(10) web.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[4]/input').click()
|
图鉴-好东西

这个东西. 既便宜. 有好用. 比超级鹰爽.
注册个账号. 如果不想注册. 直接用我的也OK
然后就可以用了.
官方示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| import base64 import json import requests
def base64_api(uname, pwd, img, typeid): with open(img, 'rb') as f: base64_data = base64.b64encode(f.read()) b64 = base64_data.decode() data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64} result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text) if result['success']: return result["data"]["result"] else: return result["message"] return ""
if __name__ == "__main__": img_path = "换成你自己的图片.jpg" result = base64_api(uname='q6035945', pwd='q6035945', img=img_path, typeid=3) print(result)
|
非常的简单. 可以自行先爽一下. 下节课我们来使用图鉴, 完成验证码的处理.