爬虫案例-爬取某度文档

文章目录

  • 1、第三方库的安装和pytesseract安装
  • 2、爬取某度文档的代码
  • 3、效果图

1、第三方库的安装和pytesseract安装

#以下是安装http请求的第三方库
pip install requests
#以下是安装处理文档的第三方库
pip install python-docx
#以下是安装处理图片的第三方库
pip install image pillow
#以下是识别图片中文字的第三方库
pip install pytesseract
#以下是大量处理维度数组与矩阵运算的第三方库
pip install numpy
#以下是图像处理和计算机视觉方面的很多通用算法的第三方库
pip install opencv-python

pytesseract需要本地安装用来配合Python安装的第三方库

pytesseractan安装包地址: 点击链接

在这里插入图片描述

在这里插入图片描述

安装时需要注意勾选安装语言包

在这里插入图片描述

2、爬取某度文档的代码

import requests
import os
from PIL import Image
from docx import Document
import pytesseract
import cv2
import numpy as np

url = "https://wenku.baidu.com/gsearch/rec/pcviewdocrec2023?"
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"}

data = {
    'sessionId': '3235255445-3246997752--',
    'docId': '3a283569cc84b9d528ea81c758f5f61fb7362802',
    'query': '什么是AI?什么是人工智能?',
    'recPositions': 'catalog,toplist'
}

request = requests.get(url,params=data,headers=header)
#print(request)
'''以下测试用的
#响应数据
print(request.text)
#响应头信息
#print(request.headers)
#状态码
#print(request.status_code)
'''
#print(request.headers)
tesseract_cmd = r'D:\Tesseract-OCR\tesseract'
pytesseract.pytesseract.tesseract_cmd =tesseract_cmd

#爬取百度文档的图片
i = 0
print(request.text)
output_folder = r"C:/Users/zzx/Desktop/百度文档" + "/"
if not os.path.exists(output_folder):
    os.makedirs(output_folder)
for index in request.json()["data"]["catalogDoc"]:
    i+=1
    pic = index['pic']
    img_content = requests.get(pic,stream=True).content

    with open(output_folder + index["title"] +str(i) + '.jpg', mode='wb') as f:
        f.write(img_content)
    print(i,pic)

# 列出输出文件夹中的图片进行文字识别后转换成文档docx
for filename in os.listdir(output_folder):
    if filename.endswith('.jpg'):
        #print(filename)
        image_path = os.path.join(output_folder,filename)
        print(image_path)
        #PIL读取图像
        #image_open = Image.open(image_path)
        #print(image_open)
        #以下是opencv读取图像,output_folder有中文的路径识别不了图片
        #image = cv2.imread(image_path)
        # 使用 numpy 的 fromfile 函数读取图像文件,可以用output_folder中文路径识别图片
        image_numpy = np.fromfile(image_path, dtype=np.uint8)
        # 使用 cv2.imdecode 函数解码图像
        image = cv2.imdecode(image_numpy, cv2.IMREAD_COLOR)
        print(image)
        #判断如果图片存在执行
        if image is not None:
            # 转换为灰度图像
            gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
            # 二值化处理
            _, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
            # 将 OpenCV 图像转换为 PIL 图像
            pil_image = Image.fromarray(thresh)
            # 初始化新的Document实例
            doc = Document()
            # 进行图片文字识别
            text = pytesseract.image_to_string(pil_image,config='--oem 3 --psm 6 -l chi_sim')
            # 将识别出的文字添加到文档中
            doc.add_paragraph(text)
            # 保存生成的Word文档,使用不同的文件名
            doc.save(os.path.join(output_folder, f'{filename[:-4]}.docx'))

3、效果图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

图片识别文字效果一般这个真没有其他办法,除非用腾讯云的OCR,除非有大神整个OCR第三方库出来

在这里插入图片描述

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

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

相关文章

在Lua中,Metatable元表如何操作?

Lua中的Metatable(元表)是一个强大的特性,它允许我们改变表(table)的行为。下面是对Lua中的Metatable元表的详细介绍,包括语法规则和示例。 1.Metatable介绍 Metatable是一个普通的Lua表,它用于…

【Ubuntu20.04】Apollo10.0 Docker容器部署+常见错误解决

官方参考文档【点击我】 Apollo 10.0 版本开始,支持本机和Docker容器两种部署方式。 如果您使用本机部署方式,建议使用x86_64架构的Ubuntu 22.04操作系统或者aarch64架构的Ubuntu 20.04操作系统。 如果您使用Docker容器部署方式,可以使用x…

springboot整合Logback

Logback介绍 描述 Logback是由log4j创始人设计的另外一种开源日志组件,性能比log4j要好。相对是一个可靠、通用、快速而又灵活的Java日志框架。 Logback主要分三个模块 1、logback-core:其他两个模块的基础模块 2、logback-classic:它是lo…

仓库叉车高科技安全辅助设备——AI防碰撞系统N2024G-2

在当今这个高效运作、安全第一的物流时代,仓库作为供应链的中心地带,其安全与效率直接关系到企业的命脉。 随着科技的飞速发展,传统叉车作业模式正逐步向智能化、安全化转型,而在这场技术革新中,AI防碰撞系统N2024G-2…

学习笔记|arduino uno r3| RGB 灯珠|Atmega328P|PWM|analogWrite|analogRead函数: RGB灯珠呼吸灯

目录 RGB 灯珠呼吸灯实验RGB 灯珠实验概述工作原理组件清单接线程序代码编译和执行 Tips: Arduino常用的函数解释analogWrite(pin, value)函数analogRead(pin)函数 总结 RGB 灯珠呼吸灯实验 RGB 灯珠实验概述 1-三色LED黑板模块的PCB颜色为黑色,使用5M…

杰发科技——使用ATCLinkTool解除读保护

0. 原因 在jlink供电电压不稳定的情况下,概率性出现读保护问题,量产时候可以通过离线烧录工具避免。代码中开了读保护,但是没有通过can/uart/lin/gpio控制等方式进行关闭,导致无法关闭读保护。杰发所有芯片都可以用本方式解除读保…

ICLR2017 | I-FGSM | 物理世界中的对抗样本

Adversarial Examples in The Physical World 摘要-Abstract引言-Introduction生成对抗图像的方法-Methods of Generating Adversarial Images对抗样本的图片-Photos of Adversarial Examples对抗图像的破坏率-Destruction Rate of Adversarial Images实验设置-Experimental Se…

MySQL(四)MySQL Select语句

1. MySQL Select语句 1.1. 基本查询语句 mysql>select 列名 from 表名;(基本结构查询某一列) mysql>select 列名1,列名2 from 表名;(查询所有列多列) mysql>select * from 表名;(*代表查询所有列) 查询时可以给列设定别名通过as 关键字,别名可以是汉字&a…

高并发写利器-组提交,我的Spring组件实战

高并发写优化理论 对于高并发的读QPS优化手段较多,最经济简单的方式是上缓存。但是对于高并发写TPS该如何提升?业界常用的有分库分表、异步写入等技术手段。但是分库分表对于业务的改造十分巨大,涉及迁移数据的麻烦工作,不会作为…

C++Primer 变量

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

【模型】Qwen2-VL 服务端UI

1. 前言 最近在测试VLM模型,发现官方的网页demo,代码中视频与图片分辨率可能由于高并发设置的很小,导致达不到预期效果,于是自己研究了一下,搞了一个简单的前端部署,自己在服务器部署了下UI界面&#xff0…

分布式事务介绍 Seata架构与原理+部署TC服务 示例:黑马商城

1. 什么是分布式事务? 在分布式系统中,如果一个业务需要多个服务合作完成,而且每一个服务都有事务,多个事务必须同时成功或失败,这样的事务就是分布式事务。其中的每个服务的事务就是一个分支事务。整个业务称为全局事务。 打个比…

uni-app:实现普通选择器,时间选择器,日期选择器,多列选择器

效果 选择前效果 1、时间选择器 2、日期选择器 3、普通选择器 4、多列选择器 选择后效果 代码 <template><!-- 时间选择器 --><view class"line"><view classitem1><view classleft>时间</view><view class"right&quo…

C++Primer 基本类型

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

纯前端实现将pdf转为图片(插件pdfjs)

需求来源 预览简历功能在移动端&#xff0c;由于用了一层iframe把这个功能嵌套在了app端&#xff0c;再用一个iframe来预览&#xff0c;只有ios能看到&#xff0c;安卓就不支持&#xff0c;查了很多资料和插件&#xff0c;原理基本上都是用iframe实现的。最终转换思路&#xf…

基于FPGA的出租车里程时间计费器

基于FPGA的出租车里程时间计费器 功能描述一、系统框图二、verilog代码里程增加模块时间增加模块计算价格模块上板视频演示 总结 功能描述 &#xff08;1&#xff09;&#xff1b;里程计费功能&#xff1a;3公里以内起步价8元&#xff0c;超过3公里后每公里2元&#xff0c;其中…

Unix 域协议汇总整理

Unix 域协议是一种用于同一台计算机上进程间通信&#xff08;IPC&#xff09;的技术。它提供了一种比基于网络的套接字更高效的方式来在本地进程中交换数据。Unix 域协议使用文件系统作为通信的媒介&#xff0c;并且只限于在同一台计算机上运行的进程之间进行通信。 Unix 域套接…

JVM学习:CMS和G1收集器浅析

总框架 一、Java自动内存管理基础 1、运行时数据区 运行时数据区可分为线程隔离和线程共享两个维度&#xff0c;垃圾回收主要是针对堆内存进行回收 &#xff08;1&#xff09;线程隔离 程序计数器 虚拟机多线程是通过线程轮流切换、分配处理器执行时间来实现的。为了线程切换…

1.C语言教程:历史、特点、版本与入门示例

目录 1.历史2.特点3.版本4.编译5.Hello World 示例 1.历史 本篇原文为&#xff1a;C语言教程&#xff1a;历史、特点、版本与入门示例。 更多C进阶、rust、python、逆向等等教程&#xff0c;可去此站查看&#xff1a;酷程网 C 语言的诞生源于 Unix 系统的开发需求。 1969 年…

lec7-路由与路由器

lec7-路由与路由器 1. 路由器硬件 路由器的硬件部分&#xff1a; 断电失去&#xff1a; RAM断电不失去&#xff1a;NVRAM&#xff0c; Flash&#xff0c; ROMinterface也算是一部分 路由器是特殊组件的计算机 console 口进行具体的调试 辅助口&#xff08;Auxiliary&…