ya110155 2023-03-04 04:34 采纳率: 50%
浏览 107
已结题

请教云码识别验证码代码!

自学Python爬虫,遇到识别验证码,使用云码不知道具体怎么操作,请大家指点。

云码网址:

我操作图片如下:请指点,写出具体的代码,谢谢!

img

  • 写回答

3条回答 默认 最新

  • 「已注销」 2023-03-04 05:16
    关注

    参考GPT和自己的思路,根据您的代码,您需要调用云码的API接口来识别验证码。云码提供了基于HTTP POST的API接口,您可以将验证码图片文件作为二进制数据上传到API服务器,并获取识别结果。

    以下是一个简单的示例代码,您可以在代码中填写您的API Token和验证码图片文件路径,然后运行程序即可实现验证码识别。

    import base64
    import json
    import requests
    
    class YunMaVerify(object):
        def __init__(self, token):
            self._token = token
            self._api_url = "http://api.jfbym.com/api/YmServer/customApi"
    
        def verify(self, image_path, verify_type):
            with open(image_path, 'rb') as f:
                image_data = f.read()
            image_base64 = base64.b64encode(image_data).decode('utf-8')
            payload = {
                'image': image_base64,
                'token': self._token,
                'type': verify_type
            }
            headers = {
                'Content-Type': 'application/json'
            }
            response = requests.post(self._api_url, headers=headers, data=json.dumps(payload))
            response_data = json.loads(response.text)
            if response_data['success']:
                return response_data['data']
            else:
                raise Exception('Failed to verify captcha: %s' % response_data['msg'])
    
    if __name__ == '__main__':
        token = 'YOUR_API_TOKEN_HERE'
        image_path = '/path/to/your/captcha/image.jpg'
        verify_type = '10111'  # 通用数英5-8位
    
        yunma = YunMaVerify(token)
        result = yunma.verify(image_path, verify_type)
        print(result)
    

    请注意,此示例代码仅用于演示云码API的基本使用方法。您需要将代码中的YOUR_API_TOKEN_HERE替换为您自己的API Token,并将/path/to/your/captcha/image.jpg替换为您的验证码图片文件路径。另外,请根据您的验证码类型选择合适的verify_type参数。如果您的验证码类型不是通用数英5-8位,请将verify_type参数替换为您自己的类型。

    希望这可以帮助您解决问题。如果您有任何其他问题,请随时问我。

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    ya110155 2023-03-04 09:41

    能不能在以下的代码上帮我修改一下,让我能从爬取的图片上提取识别码,谢谢

    import requests
    from lxml import etree
    import base64
    import json
    
    
    
    headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
    }
    
    url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
    
    page_text = requests.get(url=url,headers=headers).text
    
    tree = etree.HTML(page_text)
    
    src = 'https://so.gushiwen.cn' + tree.xpath("/html/body/form[1]/div[4]/div[4]/img/@src")[0]
    
    img_data = requests.get(url=src,headers=headers).content
    
    with open("./yzm.jpg","wb") as fp:
        fp.write(img_data)
    
    
    class YdmVerify(object):
        _custom_url = "http://api.jfbym.com/api/YmServer/customApi"
        _token = "QBBoSN0szS0kWg1c33XdGPKZmUJJOlzpUh4tykRUcNY"
        _headers = {
            'Content-Type': 'application/json'
        }
        def common_verify(self, image, verify_type="10110"):
            payload = {
                "image": base64.b64encode(image).decode(),
                "token": self._token,
                "type": verify_type
            }
            resp = requests.post(self._custom_url, headers=self._headers, data=json.dumps(payload))
            print(resp.text)
            return resp.json()['data']['data']
    
    
    if __name__ == '__main__':
        Y = YdmVerify()
        with open('yzm.jpg', 'rb') as f:
            s = f.read()
            Y.click_verify(image=s, extra="家,炉,私")
    
    
    

    回复
    「已注销」 回复 ya110155 2023-03-04 09:49

    稍等,试试

    回复
    「已注销」 回复 ya110155 2023-03-04 09:51

    根据你提供的代码,你可以在调用 Y.click_verify() 函数之前添加以下代码以实现从爬取的图片中提取识别码:

    # 导入pytesseract库
    import pytesseract
    
    # 使用pytesseract库提取识别码
    img_text = pytesseract.image_to_string(img_data)
    
    # 去掉空格和换行符
    img_text = img_text.replace(' ', '').replace('\n', '')
    
    # 调用click_verify()函数
    Y = YdmVerify()
    Y.click_verify(image=img_data, extra=img_text)
    

    这里使用 pytesseract 库对图片进行OCR识别,并将结果去掉空格和换行符后传递给 click_verify() 函数。请注意,使用 OCR 识别技术不一定能够百分百准确地提取验证码,因此您可能需要进行一些额外的调试和优化。

    回复
    展开全部8条评论
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 3月11日
  • 已采纳回答 3月4日
  • 创建了问题 3月4日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部