爬虫学习-验证码识别

  • 反爬机制:验证码,识别验证码图片中的数据,用于模拟登陆

    • 识别验证码的操作

  • 人工肉眼识别(不推荐)

  • 第三方自动识别(推荐)

  • python第三方库:tesseract、ddddocr

  • 使用方法

  • 超级鹰使用教程

  • 1、注册登录

  • 2、购买题分

  • 3、用户中心-》软件ID-》生成ID-》提交

  • 4、开发文档-》python的Demo下载

  • 5、放到同级目录里,调一下

  • 使用打码平台识别验证码的编码流程:

  • 将验证码图片进行本地下载

  • 调用平台提供的示例代码,进行图片数据识别

  • 例子

  • 获取古诗文网验证码

# 识别古诗文网验证码登录
import requests
from lxml import etree
import ddddocr
from chaojiying import Chaojiying_Client

if __name__ == '__main__':
    # 获取验证码图片,并保存验证码图片到本地

    url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54'
    }
    page_text = requests.get(url=url, headers=headers).text
    tree = etree.HTML(page_text)
    img_src = tree.xpath('//*[@id="imgCode"]/@src')[0]
    img_src = 'https://so.gushiwen.cn' + img_src
    print(img_src)
    img_data = requests.get(url=img_src, headers=headers).content
    with open('a.jpg', 'wb') as fp:
        fp.write(img_data)
    # # 调用打码平台的示例层序进行验证码图片数据识别
    # chaojiying = Chaojiying_Client('账户', '密码', '943457')  # 用户中心>>软件ID 生成一个替换 96001
    # im = open('a.jpg', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    # code_tag = chaojiying.PostPic(im, 1902)  # 1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()
    # # print(code_tag)
    # # print(code_tag['pic_str'])
    # code = code_tag['pic_str']
    ocr = ddddocr.DdddOcr()
    with open('a.jpg', 'rb') as f:
        img_bytes = f.read()
    res = ocr.classification(img_bytes)
    print(res)
  • 对古诗文网进行模拟登录

import ddddocr
import requests
from lxml import etree

if __name__ == '__main__':
    # 1、获取验证码图片的文字数据
    url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54'
    }
    session = requests.Session()
    page_text = session.get(url=url, headers=headers).text
    tree = etree.HTML(page_text)
    img_src = 'https://so.gushiwen.cn' + tree.xpath('//*[@id="imgCode"]/@src')[0]
    # print(img_src)
    code_data = session.get(url=img_src, headers=headers).content
    with open('./a.jpg', 'wb') as fp:
        fp.write(code_data)
    ocr = ddddocr.DdddOcr()
    with open('a.jpg', 'rb') as f:
        img_bytes = f.read()
    code = ocr.classification(img_bytes)
    print(code)
    # 2、对post请求进行发送(处理请求参数)
    post_url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
    param = {
        '__VIEWSTATE': 'LEVhj4L7rIz3Bvtl1Qic94SRQ5LHyhp7oQWBifUJ + 3zDwdL8028kq2H2W6DgoZ9dus1rxfSVJQ8uQ1lzvRRLhN7GzwDpp9NUOXorj + Wa92FiThQWYzr0LDyce + 66vAvYO1 / rlwt4q0ul6 + jImgjl7J6ndHs =',
        '__VIEWSTATEGENERATOR': 'C93BE1AE',
        'from': 'http://so.gushiwen.cn/user/collect.aspx',
        'email': '账户',
        'pwd': '密码',
        'code': code,
        'denglu': '登录',
    }
    login_text = session.post(url=post_url, params=param, headers=headers)
    print(login_text.status_code)
    login_text = login_text.text
    url2 = 'https://so.gushiwen.cn/user/collect.aspx'
    login_text2 = session.post(url=url2, headers=headers).text
    print(login_text2)
    with open('./古诗文.html', 'w', encoding='utf-8') as fp:
        fp.write(login_text2)
    # 3、对响应数据进行持久化储存

  • 点击登录按钮之后或发起一个post请求

  • post请求中会携带登录之前录入的相关的登录信息(用户名、密码、验证码.....)

  • 验证码:每次请求都会变化

    • cookie相关操作

  • http/https协议特性:无状态

  • 没有请求到对应页面数据的原因:发起的第二次基于个人主页页面请求的时候,服务器并不知道该请求是基于登录状态下的请求

  • cookie:用来让服务器端记录下客户端的相关状态

  • 添加cookie

  • 一、手动添加:通过抓包工具获取cookie值,将该值封装到headers中,requests中作为参数

  • 二、自动添加

  • cookie值来源:模拟登录post请求后,由服务器端创建

  • session会话对象:

  • 可以进行请求发送

  • 如果请求过程中产生了cookie,则该cookie会被自动储存/携带在该session对象中

  • 使用方法:

  • 0、创建一个session对象:session=requests.Session()

  • 1、使用session对象进行模拟登录post请求的发送(cookie就会被储存在session对象中)

  • 2、使用已经储存了cookie的session对象在对相应页面进行get请求发送(携带了cookie)

    • 代理:破解封ip这种反爬机制

  • 什么是代理:代理服务器

  • 代理的作用:

  • 突破自身ip访问的限制

  • 可以隐藏自身真实的ip

  • 代理相关网站

  • 快代理

  • 西祠代理

  • 代理类型:

  • http:应用到http协议对应的url当中

  • https:应用到https协议对应的url当中

  • 代理ip的匿名度

  • 透明:服务器知道该次请求使用了代理,也知道该次请求对应的真实ip

  • 匿名:服务器知道该次请求使用了代理,不知道该次请求对应的真实ip

  • 高匿名:服务器不知道该次请求使用了代理,更不知道该次请求对应的真实ip

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
【为什么学爬虫?】        1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!        2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是:网络请求:模拟浏览器的行为从网上抓取数据。数据解析:将请求下来的数据进行过滤,提取我们想要的数据。数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是:爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求!【课程服务】 专属付费社群+定期答疑
Python爬虫验证码识别是指在进行爬虫时,遇到网页上设置的验证码,使用特定的技术来自动识别验证码并绕过验证码验证。这是一种非常重要的技术,在Python爬虫中起到关键作用。[2] 实现Python爬虫验证码识别可以按照以下步骤进行: 1. 下载验证码图片:首先需要准备一些验证码图片。可以通过在网络上搜索验证码图片进行下载,或者使用Python爬虫程序去爬取目标网站的验证码。例如,可以手动下载一个简单的数字验证码图片,并保存为“test.jpg”文件。 2. 图像预处理:对下载的验证码图片进行预处理,包括去噪、二值化、降噪等操作。这可以通过使用Python的图像处理库,如OpenCV,来实现。 3. 特征提取:从预处理后的验证码图片中提取特征,例如字符的形状、颜色、纹理等信息。这可以通过使用图像处理和机器学习的算法和技术来实现。 4. 训练模型:使用提取的特征和已知的验证码样本进行训练,构建一个验证码识别模型。可以使用机器学习算法,如支持向量机(SVM)或深度学习算法,如卷积神经网络(CNN)来训练模型。 5. 验证码识别:使用训练好的模型对新的验证码进行识别。可以将验证码图片输入到模型中,模型将输出对应的验证码结果。 6. 验证码绕过:根据验证码识别的结果,可以编写代码来绕过验证码验证,实现自动化的爬取。 需要注意的是,验证码识别是一项复杂的任务,识别效果可能会受到多种因素的影响,如验证码的复杂程度、噪音干扰、字体变化等。因此,在实际应用中,需要根据具体情况选择合适的处理方法和技术,以达到最佳的识别效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python爬虫验证码识别](https://blog.csdn.net/naer_chongya/article/details/130785840)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knoka705

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值