python爬虫selenium和ddddocr使用

news/2024/5/18 12:45:41/文章来源:https://blog.csdn.net/qq_52059326/article/details/134109045

python爬虫selenium和ddddocr使用

selenium使用

selenium实际上是web自动化测试工具,能够通过代码完全模拟人使用浏览器自动访问目标站点并操作来进行web测试。

通过python+selenium结合来实现爬虫十分巧妙。

由于是模拟人的点击来操作,所以实际上被反爬的概率将大大降低。
selenium能够执行页面上的js,对于js渲染的数据和模拟登陆处理起来非常容易。

1.安装

pip install selenium

image-20231029211133077

2.安装模拟驱动webdriver

以谷歌浏览器为例,首先查看浏览器的版本号

image-20231029211315136

下载对应版本号的安装包,下好后解压

版本号70-114:http://chromedriver.storage.googleapis.com/index.html

版本号118-120:https://googlechromelabs.github.io/chrome-for-testing/#stable

image-20231029220834294

3.代码编写

首先引入包

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

配置浏览器启动地址和webservice地址

options = webdriver.ChromeOptions()
options.binary_location = 'chrome.exe的地址
driver_location = "chromedriver.exe的地址

打开浏览器,并访问网站

browser = webdriver.Chrome(service=Service(driver_location), options=options)
browser.get('https://www.jd.com/')

完整代码

# @Author : 陈天在睡觉
# @Time : 2023/10/28 23:19
from selenium import webdriver
from selenium.webdriver.chrome.service import Serviceoptions = webdriver.ChromeOptions()
options.binary_location = 'C:\\chrome.exe'# 谷歌浏览器地址
driver_location = "E:\\chromedriver.exe"# 谷歌浏览器driver地址
browser = webdriver.Chrome(service=Service(driver_location), options=options)
browser.get('https://www.jd.com/') # 访问网站

image-20231029213632696

这个时候我们发现浏览器打开页面后就会关闭,我们只需要加上一行代码即可

options.add_experimental_option("detach",True)

完整代码

image-20231029213846828

4.获取元素

我们可以通过drowser的find_element找到对象

from selenium.webdriver.common.by import By
browser.find_element(By.ID,"title")#通过id来查找id为title的元素

老版本的selenium查找方法为

from selenium.webdriver.common.by import By
browser.find_element_by_id("title")

找到元素可以使用click()模拟点击,send_keys()模拟输入

from selenium.webdriver.common.by import By
username =  browser.find_element(By.ID,"username")
submit =  browser.find_element(By.ID,"submit")
username.send_keys("admin")
submit.click()

ddddocr使用

ddddocr(Deep Double-Digital Digits OCR)是一个基于深度学习的数字识别库,专门用于识别双重数字(双位数字)的任务。它是一个开源项目,提供了训练和预测的功能,可用于识别图片中的双位数字并输出其具体的数值。

  1. 深度学习:ddddocr利用深度学习技术,特别是卷积神经网络和循环神经网络,对双重数字进行准确的识别。
  2. 开源项目:ddddocr是一个开源项目,允许用户免费使用、修改和分发代码。这使得更多的开发者可以参与其中,贡献自己的想法和改进。
  3. 高准确率:通过深度学习的方法,ddddocr在双重数字识别任务上能够取得较高的准确率,有效克服了传统方法在此任务上的困难。
  4. 灵活性:ddddocr提供了训练和预测的功能,用户可以根据自己的需求自定义模型并进行训练,以适应不同的双重数字识别任务。

ddddocr的目标是提供一个简单而有效的工具,帮助开发者和研究者在双重数字识别任务上取得更好的结果。通过使用该库,用户可以轻松地集成双重数字识别功能到自己的应用程序或项目中,实现更准确和可靠的数字识别功能。

1.安装

需要注意的是python版本过高是安装不了的,我使用的是python3.9

pip install ddddocr

image-20231029215334646

2.修改配置

我们直接使用ddddocr会出现以下错误

image-20231029215818471

原因是在pillow的10.0.0版本中,ANTIALIAS方法被删除了,使用新的方法即可:

旧方法:Image.ANTIALIAS

新方法:Image.LANCZOS

解决办法:

方案一,修改ddddocr的_init_.py文件,将其中的ANTIALIAS替换为新方法:

image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.ANTIALIAS).convert('L')image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.LANCZOS).convert('L')

方案二,降级Pillow的版本,比如使用9.5.0版本

先卸载,再重新安装

pip uninstall -y Pillowpip install Pillow==9.5.0

这里我采用的是方法一,直接点击红框框里的文件

image-20231029215818471

image-20231029215908977

3.编写代码

直接上代码

# @Author : 陈天在睡觉
# @Time : 2023/10/29 21:50
import ddddocrocr = ddddocr.DdddOcr()
with open('img.png', 'rb') as f:image = f.read()
res = ocr.classification(image)print('识别出的验证码为:' + res)

测试的图片

image-20231029220130612

测试结果

image-20231029220144452

如果不想看到广告可以添加show_ad = False

# @Author : 陈天在睡觉
# @Time : 2023/10/29 21:50
import ddddocrocr = ddddocr.DdddOcr(show_ad = False)
with open('img.png', 'rb') as f:image = f.read()
res = ocr.classification(image)print('识别出的验证码为:' + res)

image-20231029220254998

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_190442.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4 体积云制作 学习笔记

首先Noise本来就是一张噪点图 云的扰动不能太大,将Scale调小,并将InputMin调整为0 形成这样一张扰动图 扰动需要根据材质在世界的位置进行调整,所以Position需要加上WorldPosition 材质在不同世界位置,噪点不同 除以一个数&#…

【Jenkins】新建任务FAQ

问题1. 源码管理处填入Repository URL,报错:无法连接仓库:Error performing git command: ls-remote -h https://github.com/txy2023/GolangLearning.git HEAD 原因: jenkins全局工具配置里默认没有添加git的路径,如果…

【Redis】认识Redis-特点特性应用场景对比MySQL重要文件及作用

文章目录 认识redisredis的主要特点redis的特性(优点)redis是单线程模型,为什么效率这么高,访问速度这么快redis应用场景redis不可以做什么MySQL和Redis对比启动RedisRedis客户端Redis重要文件及作用 认识redis redis里面相关的小…

SCNet:自校正卷积网络(附代码)

论文地址:https://mftp.mmcheng.net/Papers/20cvprSCNet.pdf 代码地址:https://github.com/MCG-NKU/SCNet 1.是什么? SCNet是一种卷积神经网络,它使用自校准卷积(Self-Calibrated Convolutions)来增强子…

web:[网鼎杯 2020 青龙组]AreUSerialz

题目 点进题目发现 需要进行代码审计 function __destruct() {if($this->op "2")$this->op "1";$this->content "";$this->process();}这里有__destruct()函数,在对象销毁时自动调用,根据$op属性的值进行…

一个基于Excel模板快速生成Excel文档的小工具

介绍 DocumentGenerator是一个Excel快速生成工具,目标以后还能实现Word、pdf等的文件的生成。该程序独立运行,可通过HTTP接口调用其生成接口。 典型使用场景为如下: 使用者编写模板文件使用者准备模板文件的填充JSON数据内容使用者通过网络…

【LVS实战】02 搭建一个LVS-NAT实验

一、网络结构 用虚拟机搭建如下的几台机器,并配置如下的ip 关于虚拟机网卡和网络的配置,可以参考 iptables章节,05节:网络转发实验 主机A模拟外网的机器 B为负载均衡的机器 C和D为 RealServer 二、C和D主机的网关设置 C和D机…

Qt 重写QSlider简单实现滑动解锁控件(指定百分比回弹效果)

组件效果图: 应用场景: 用于滑动解锁相关场景,Qt的控件鼠标监听机制对于嵌入式设备GUI可触摸屏依旧可用。 实现方式: 主要是通过继承QSlider以及搭配使用QStyleOptionSlider来实现效果。 注意细则: QStyleOptionSlider是用于定制空白区域是否可移动滑块,根据需求可…

[Linux]线程池

[Linux]线程池 文章目录 [Linux]线程池线程池的概念线程池的优点线程池的应用场景线程池的实现 线程池的概念 线程池是一种线程使用模式。线程池是一种特殊的生产消费模型,用户作为生产者,线程池作为消费者和缓冲区。 线程过多会带来调度开销&#xff0c…

第16期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练 Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…

rabbitmq Could not find handle.exe, please install from sysinternals

报错:Could not find handle.exe, please install from sysinternals 这是由于rabbitmq 调用 windows系统中handle.exe,但是handle.exe缺失而导致的错误。 解决方案: 下载 Handle - Sysinternals | Microsoft Learn 完成后,安…

鸿蒙开发第一步-入门

本人安卓开发小趴菜一枚,在现公司做中控产品,目前通过 Java,Kotlin开发,但是随着后面可能会用到华为产品(后续华为可能不支持安卓)做中控设备,所以在领导的建议下,入手鸿蒙开发。 先说下中控产品吧,以pad开…

数据结构───链表

花费一个周时间学完了链表(的一部分),简单总结一下。 链表的学习离不开画图,将其抽象成一种逻辑模型,可以减少思考时间,方便理解。 链表大致分为8种结构,自己学习并实现了两种结构,也…

YugaByteDB -- 全新的 “PostgreSQL“ 存储层

文章目录 0 背景1 架构1.1 Master1.2 TServer1.3 Tablet 2 读写链路2.1 DDL2.2 DML2.3 事务 3 KEY 的设计4 Rocksdb 在 YB 中的一些实践总结 0 背景 YugaByteDB 的诞生也是抓住了 spanner 推行的NewSQL 浪潮的尾巴,以 PG 生态为基础 用C实现的 支持 SQL 以及 CQL 语…

Linux常用命令——chmod命令

在线Linux命令查询工具 chmod 用来变更文件或目录的权限 补充说明 chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件…

SpringBoot中CommandLineRunner详解(含源码)

文章目录 前言实例导入库application.yamlRunnerSpringBootCommandLineRunnerApplication执行结果 先后顺序示例OrderRunner1OrderRunner2执行结果 通常用法加载初始化数据示例 启动后打印应用信息示例 启动异步任务示例 接口健康检查示例 外部服务调用示例 参数校验示例 动态设…

【设计模式】第14节:结构型模式之“代理模式”

一、简介 代理模式(Proxy Design Pattern)在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。 二、优点 关注点分离访问控制延迟实例化远程访问缓存增加附加功能 三、应用场景 访问控…

GLoRE:大型语言模型的逻辑推理能力探究

最新研究揭示,尽管大语言模型LLMs在语言理解上表现出色,但在逻辑推理方面仍有待提高。为此,研究者们推出了GLoRE,一个全新的逻辑推理评估基准,包含12个数据集,覆盖三大任务类型。 实验对比发现,…

基于UDP/TCP的网络通信编程实现

小王学习录 今日鸡汤Socket套接字基于UDP来实现一个网络通信程序DatagramSocket类DatagramPacket类基于UDP的服务器端代码基于UDP的客户端代码基于TCP来实现一个网络通信程序ServerSocket类Socket类基于TCP的服务器端代码基于TCP的客户端代码优化之后的服务器端代码补充TCP长短…

详解类生到死的来龙去脉

类生命周期和加载过程 一个类在 JVM 里的生命周期有 7 个阶段,分别是加载(Loading)、校验(Verification)、准备(Preparation)、解析(Resolution)、初始化(Ini…