Python实现强制复制粘贴的示例详解
作者:嗨学编程 发布时间:2021-03-30 23:58:43
前因后果
公司有人阳了,今天在家上班,突然小姨子就问我有没有baidu文库会员,想下载点东西,我心想这还要会员?用Python不是分分钟的事情!
然后我非常自信的告诉她不用会员随便下载,结果她顺势想来我家,还问我她姐姐在不在家,趁我一个人在家过来想干嘛?本着男孩子一个人在家要好好保护自己的原则,于是我过段拒绝了她!
兄弟们我做的对吗?
咱们来开始今天的内容,咱们不仅要强制复制粘贴,还要自动保存到world文档,就问你刑不刑!
需要的模块
requests # 数据请求模块
docx # 文档保存
re # 内置模块 不需要安装
除了 re 模块,前面两个都是第三方模块,需要手动安装,win+r 打开运行框输入cmd,点击确定弹出命令提示符窗口输入 pip install 加上模块名即可。
docx 需要加上Python ,pip install python-docx
流程思路
基本思路流程
一、分析数据来源
找文档数据内容, 是在那个url里面生成的,通过开发者工具进行抓包分析。
打开开发者工具: F12 / 鼠标右键点击检查选择network
刷新网页: 让本网页数据内容重新加载一遍,如果你是非VIP账号, 看数据, 图片形式 —> 把数据<图片> 获取下来 —> 做文字识别;
分析文库数据内容,,图片所在地址;
获取所有图片内容: 文库数据 --> 图片形式 —> 所有图片内容保存下载
文字识别, 把图片文字识别出来, 保存word文档里面
二、代码实现步骤
1.发送请求, 模拟浏览器对于url地址发送请求
图片数据包:
2.获取数据, 获取服务器返回响应数据
开发者工具: response
3.解析数据, 提取图片链接地址
4.保存数据, 把图片内容保存到本地文件夹
5.做文字识别, 识别文字内容
6.把文字数据信息, 保存word文档里面
代码展示
导入模块
# 导入数据请求模块
import requests
# 导入格式化输出模块
from pprint import pprint
# 导入base64
import base64
# 导入os模块
import os
# 导入文档模块
from docx import Document
# 导入正则
import re
# 导入json
import json
文字识别:
1. 注册一个百度云API账号
2. 创建应用 并且去免费领取资源
3. 在技术文档里面 Access Token获取
4. 调用API接口来做文字识别
client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Gu7BGsfoKFZjLGvOKP7WezYv&client_secret=rGa2v2FcVnxBDFlerSW5H0D2eO7nRxdp'
response = requests.get(host)
access_token = response.json()['access_token']
通用文字识别(高精度版)
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
二进制方式打开图片文件
f = open(file, 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
json_data = requests.post(request_url, data=params, headers=headers).json()
列表推导式
words = '\n'.join([i['words'] for i in json_data['words_result']])
return words
读取文件夹里面所有图片内容
content_list = []
files = os.listdir('img\\')
for file in files:
filename = 'img\\' + file
words = get_content(file=filename)
print(words)
content_list.append(words)
保存word文档里面
doc = Document()
# 添加第一段文档内容
content = '\n'.join(content_list)
doc.add_paragraph(content)
doc.save('data.docx')
发送请求,模拟浏览器对于url地址发送请求。
请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
html_data = requests.get(url=link, headers=headers).text
json_data = json.loads(re.findall('var pageData = (.*?);', html_data)[0])
pprint(json_data)
for j in json_data['aggInfo']['docList']:
name = j['title'] # 名字
score = j['score'] # 评分
viewCount = j['viewCount'] # 阅读量
downloadCount = j['downloadCount'] # 下载量
docId = j['docId'] # 数据包ID
确定请求链接
url = 'https://wenku.baidu.com/gsearch/rec/pcviewdocrec'
请求参数
data = {
'docId': docId,
'query': name,
'recPositions': ''
}
请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
发送请求
response = requests.get(url=url, params=data, headers=headers)
获取数据, 获取服务器返回响应数据
response.json() 获取响应json字典数据, 但是返回数据必须是完整json数据格式 花括号 {}
response.text 获取响应文本数据, 返回字符串 任何时候都可以, 但是基本获取网页源代码的时候
response.content 获取响应二进制数据, 返回字节 保存图片/音频/视频/特定格式文件
解析数据, 提取图片链接地址
字典取值: 键值对 根据冒号左边内容[键], 提取冒号右边的内容[值]
for循环遍历, 把列表里面元素一个一个提取出来
# 定义文件名 整型
num = 1
# for循环遍历, 把列表里面元素一个一个提取出来
for index in response.json()['data']['relateDoc']:
# index 字典呀
pic = index['pic']
print(pic)
保存数据 发送请求 + 获取数据 二进制数据内容
img_content = requests.get(url=pic, headers=headers).content
# 'img\\'<文件夹名字> + str(num)<文件名> + '.jpg'<文件后缀> mode='wb' 保存方式, 二进制保存
# str(num) 强制转换成 字符串
# '图片\\' 相对路径, 相对于你代码的路径 你代码在那个地方, 那个代码所在地方图片文件夹
with open('图片\\' + str(num) + '.jpg', mode='wb') as f:
# 写入数据 保存数据 把图片二进制数据保存
f.write(img_content)
# 每次循环 + 1
print(num)
num += 1
效果展示
world文档
来源:https://blog.csdn.net/fei347795790/article/details/128343718
猜你喜欢
- 马上就是圣诞节了,先提前祝大家圣诞快乐!:christmas_tree::christmas_tree::christmas_t
- 一、ASP中处在双引号中的可以是任意的字符、字符串,HTML代码1.<%response.write ("I&nb
- 这篇文章主要介绍了简单了解Python3 bytes和str类型的区别和联系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- python实现的五子棋,能够自动判断输赢,没有是实现电脑对战功能源码下载:pygame五子棋# 1、引入pygame 和 pygame.l
- 要读懂这些代码主要是要了解ASP中操作二进制数据的对象ADODB.Stream!本程序主要用的就是Adodb.Stream,如果你有这个基础
- python中的sys是提供了一系列有关python运行环境的变量和函数的模块,如sys.argv函数实现从程序外部向程序传递参数;sys.
- Tensorflow数据读取有三种方式:Preloaded data: 预加载数据Feeding: Python产生数据,再把数据喂给后端。
- 代码如下:<% set studentinstance = CreateStudent()&n
- 我看blog里,还有很多地方都引用过我写的这个类,转了不少,但自己一直也没发表过,这次正式发表一下。在蓝色理想中有人不懂怎么用,我在baid
- 此文用来正式回复大辉同学的疑问。1、结论:固定宽度只适合功能型网站,不适合希望用户认真阅读的浏览型网站。UCD大社区是浏览型网站,它的定位是
- 为什么传输几千个表的数据时向导会失败?当前的向导体系结构会创建一个 DTS 软件包数据流以传输数据。但如果要处理几千个表,则会遇到可伸缩性限
- 项目介绍go-admin 是一个中后台管理系统,基于(gin, gorm, Casbin, Vue, Element UI)实现。主要目的是
- 例如:将日期格式为2009-6-8的转换为2009-06-08,给小于10的数字补上一个0方法一:year(now)
- PDO::beginTransactionPDO::beginTransaction 启动一个事务(PHP 5 >= 5.1.0, P
- ⛳️ 本次反反爬实战案例背景本篇博客选择的案例是由 VX 好友提出,他希望有一篇博客能简单的介绍清楚下面这个问题。快速定位加密参数逻辑,快速
- 首先感谢比尔、感谢微软、感谢MSDN,是他们让我看到他们富有创意的一面,好了好了不废话了。我们经常把多个CSS或者多个JS并成一个,以节省请
- 和YSlow一样,“Page Speed”也是一个基于firebug附加组件的FireFox插件。虽然听起来有点拗口,但是意思很容易理解:如
- 方法1: 用file_get_contents 以get方式获取内容:<?php$url='https://www.aspxh
- MySQL是一个真正的多用户、多线程SQL数据库服务器。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mys
- 综述:本文讨论了VBScript和 JScript之间的区别,以及它们的使用场合。推荐:Vbscript5.5中文语言参考手册chm格式下载