【网络安全带你练爬虫-100练】第20练:数据处理-并写入到指定文档位置

目录

一、目标1:解码+去标签

二、目标2:提取标签内内容

三、目标3:处理后的数据插入原位置

四、目标4:将指定的内容插入指定的位置

五、目标5:设置上下文字体格式

六、目标6:向多个不同位置插入不同的字符串

七、目标7:向多个不同位置插入不同的字符串

八、目标8:图文写入到指定的字符串后面


一、目标1:解码+去标签

使用函数:html.unescape()解码+replace()替换

import htmldata = '\u003cp\u003e(此处忽略一万个字)'# 解码HTML实体,并替换相应字符
decoded_data = html.unescape(data).replace('<p><br></p>', '\n').replace('<p>','').replace('</p>','')# 输出结果
print(decoded_data)



二、目标2:提取标签内内容

思路:其实也就是正则匹配

img标签去掉并换行,只留下URL

代码:

import retext = '<img src="URL">…………(此处省略一万字)'# 提取URL
urls = re.findall(r'<img\s+src="([^"]+)"\s*>', text)# 替换<img>标签为URL,并添加换行符
for url in urls:text = re.sub(r'<img\s+src="[^"]+"\s*>', url + '\n', text, count=1)print(text)



三、目标3:处理后的数据插入原位置

将以下代码中图片URL下载后,并按照原位置插入文档

import requests
from docx import Document
from docx.shared import Inches# 创建一个新的Word文档
doc = Document()text = '''
图片:
https://xxxxx.png
'''# 以换行符分割文本
lines = text.split('\n')for line in lines:if line.startswith('https://'):# 下载图片response = requests.get(line)image_path = line.split('/')[-1]  # 使用URL中的最后一部分作为文件名保存图片with open(image_path, 'wb') as f:f.write(response.content)# 插入图片到Word文档doc.add_picture(image_path, width=Inches(4))  # 根据需要调整图片的宽度else:# 插入文本到Word文档doc.add_paragraph(line)# 保存Word文档
doc.save("output.docx")

四、目标4:将指定的内容插入指定的位置

使用python打开一个word文档,并将内容写入到指定字符串后面

from docx import Document# 打开Word文档
doc = Document('example.docx')# 获取文档中所有段落的内容
paragraphs = [p.text for p in doc.paragraphs]# 指定要插入内容的位置
target_string = '指定字符串'
insert_index = paragraphs.index(target_string) + 1  # 在目标字符串后面插入,所以需要加1# 要插入的内容
new_content = '要插入的内容'# 在指定位置后插入内容
doc.paragraphs[insert_index].insert_paragraph_before(new_content)# 保存修改后的Word文档
doc.save('example_modified.docx')



五、目标5:设置上下文字体格式

将写入文本的的字体大小与上一行一致

from docx import Document
from docx.shared import Pt# 打开Word文档
doc = Document('example.docx')# 获取上一行的字体大小
previous_paragraph = doc.paragraphs[-1]
previous_run = previous_paragraph.runs[-1]
previous_font_size = previous_run.font.size# 要写入的文本内容
new_text = '新的文本'# 在新行中写入文本
new_paragraph = doc.add_paragraph()
new_run = new_paragraph.add_run(new_text)# 设置新行的字体大小与上一行一致
new_font = new_run.font
new_font.size = previous_font_size# 保存修改后的Word文档
doc.save('example_modified.docx')

插入与上一行字体一样大小的文字

from docx import Document
from docx.shared import Ptdef word_info_w():# 打开Word文档doc = Document('test.docx')# 获取文档中所有段落的内容paragraphs = [p.text for p in doc.paragraphs]# 指定要插入内容的位置target_string = '附件:'insert_index = paragraphs.index(target_string) + 1  # 在目标字符串后面插入,所以需要加1# 获取上一行的字体大小previous_paragraph = doc.paragraphs[insert_index - 1]previous_run = previous_paragraph.runs[-1]previous_font_size = previous_run.font.size# 要插入的内容new_content = '测试title'# 在指定位置后插入内容new_paragraph = doc.paragraphs[insert_index].insert_paragraph_before(new_content)# 设置新插入内容的字体大小与上一行一致new_run = new_paragraph.runs[0]new_font = new_run.fontnew_font.size = previous_font_size# 保存修改后的Word文档doc.save('test.docx')if __name__ == '__main__':word_info_w()



六、目标6:向多个不同位置插入不同的字符串

向多个不同位置插入不同的字符串

(可能会插入到同一个位置)

from docx import Documentdef insert_content(doc, insert_dict):# 获取文档中所有段落的内容paragraphs = [p.text for p in doc.paragraphs]for target_string, new_content in insert_dict.items():if target_string in paragraphs:# 指定要插入内容的位置insert_index = paragraphs.index(target_string) + 1  # 在目标字符串后面插入,所以需要加1# 获取上一行的字体大小previous_paragraph = doc.paragraphs[insert_index - 1]previous_run = previous_paragraph.runs[-1]previous_font_size = previous_run.font.size# 在指定位置后插入内容new_paragraph = doc.paragraphs[insert_index].insert_paragraph_before(new_content)# 设置新插入内容的字体大小与上一行一致new_run = new_paragraph.runs[0]new_font = new_run.fontnew_font.size = previous_font_size# 保存修改后的Word文档doc.save('test.docx')if __name__ == '__main__':# 打开Word文档doc = Document('test.docx')# 定义要插入的内容和位置的字典insert_dict = {'附件:': '测试title1','目录:': '测试title2'}# 插入内容insert_content(doc, insert_dict)



七、目标7:向多个不同位置插入不同的字符串

from docx import Documentdef insert_content(doc, target_string, new_content):# 获取文档中所有段落的内容paragraphs = [p.text for p in doc.paragraphs]if target_string in paragraphs:# 指定要插入内容的位置insert_index = paragraphs.index(target_string) + 1  # 在目标字符串后面插入,所以需要加1if insert_index < len(doc.paragraphs):# 在指定位置后插入内容doc.paragraphs[insert_index].insert_paragraph_before(new_content)# 保存修改后的 Word 文档doc.save('test.docx')if __name__ == '__main__':# 打开 Word 文档doc = Document('test.docx')# 定义要插入的内容和位置的字典insert_dict = {'指定字符1位置': '插入内容1','指定字符2位置': '插入内容2','指定字符3位置': '插入内容3'}for target_string, new_content in insert_dict.items():# 插入内容insert_content(doc, target_string, new_content)

指定字体大小

from docx import Document
from docx.shared import Ptdef insert_content(doc, target_string, new_content):# 获取文档中所有段落的内容paragraphs = [p.text for p in doc.paragraphs]if target_string in paragraphs:# 指定要插入内容的位置insert_index = paragraphs.index(target_string) + 1  # 在目标字符串后面插入,所以需要加1if insert_index < len(doc.paragraphs):# 在指定位置后插入内容paragraph = doc.paragraphs[insert_index]run = paragraph.insert_paragraph_before(new_content).runs[0]font = run.fontfont.size = Pt(12)  # 设置字体大小为3号字体(12磅)# 保存修改后的 Word 文档doc.save('test.docx')if __name__ == '__main__':# 打开 Word 文档doc = Document('test.docx')# 定义要插入的内容和位置的字典insert_dict = {'指定字符1位置': '插入内容1','指定字符2位置': '插入内容2','指定字符3位置': '插入内容3'}for target_string, new_content in insert_dict.items():# 插入内容insert_content(doc, target_string, new_content)



八、目标8:图文写入到指定的字符串后面

from docx import Document
from docx.shared import Pt
from docx.shared import Inches
import requestsdef word_img_text_w(word, target_string):# 打开 Word 文档doc = Document('test.docx')# 获取文档中所有段落的内容paragraphs = [p.text for p in doc.paragraphs]if target_string in paragraphs:# 指定目标字符串的位置insert_index = paragraphs.index(target_string) + 1  # 在目标字符串后面插入,所以需要加1# 以换行符分割文本lines = word.split('\n')for line in lines:if line.startswith('https://'):# 下载图片response = requests.get(line)image_path = line.split('/')[-1]  # 图片保存的本地路径,使用URL中的最后一部分作为文件名with open(image_path, 'wb') as f:f.write(response.content)# 插入图片到Word文档doc.paragraphs[insert_index].add_run().add_picture(image_path, width=Inches(4))  # 根据需要调整图片的宽度insert_index += 1else:# 插入文本到Word文档run = doc.paragraphs[insert_index].add_run(line)run.font.size = Pt(16)  # 设置字体大小为16磅insert_index += 1# 保存Word文档doc.save("test.docx")if __name__ == '__main__':# 要插入的内容content = '''测试
https://xx.png
https://xxxx.png'''# 指定目标字符串target_string = '指定目标字符1'# 插入内容到Word文档word_img_text_w(content, target_string)

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

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

相关文章

PMP是什么?项目管理专业人士资格认证介绍

PMP认证旨在评估和确认具备一定经验和知识的项目管理专业人士的能力。通过获得PMP认证&#xff0c;项目经理可以证明他们具备在各个行业中成功领导和管理项目所需的技能。这些技能包括十二原则、8大绩效等方面的知识。 以下是PMP认证的详细介绍&#xff1a; 1. 资格要求&…

详解TCP/IP的三次握手和四次挥手

文章目录 前言一、TCP/IP协议的三次握手1.1 三次握手流程 二、TCP/IP的四次挥手2.1 四次挥手流程 三、主要字段3.1、标志位&#xff08;Flags&#xff09;3.2、序号&#xff08;sequence number&#xff09;3.3、确认号&#xff08;acknowledgement number&#xff09; 四、状态…

PAT 1164 Good in C 测试点3,4

个人学习记录&#xff0c;代码难免不尽人意。 When your interviewer asks you to write “Hello World” using C, can you do as the following figure shows? Input Specification: Each input file contains one test case. For each case, the first part gives the 26 …

手写Mybatis:第9章-细化XML语句构建器,完善静态SQL解析

文章目录 一、目标&#xff1a;XML语句构建器二、设计&#xff1a;XML语句构建器三、实现&#xff1a;XML语句构建器3.0 引入依赖3.1 工程结构3.2 XML语句构建器关系图3.3 I/O资源扫描3.4 SQL源码3.4.1 SQL对象3.4.2 SQL源码接口3.4.3 原始SQL源码实现类3.4.4 静态SQL源码实现类…

《TCP/IP网络编程》阅读笔记--地址族和数据序列

目录 1--IP地址和端口号 2--地址信息的表示 3--网络字节序与地址变换 4--网络地址的初始化与分配 5--Windows部分代码案例 1--IP地址和端口号 IP 地址分为两类&#xff1a; ① IPv4 表示 4 字节地址族&#xff1b; ② IPv6 表示 16 字节地址族&#xff1b; IPv4 标准的 4 …

B081-Lucene+ElasticSearch

目录 认识全文检索概念lucene原理全文检索的特点常见的全文检索方案 Lucene创建索引导包分析图代码 搜索索引分析图代码 ElasticSearch认识ElasticSearchES与Kibana的安装及使用说明ES相关概念理解和简单增删改查ES查询DSL查询DSL过滤 分词器IK分词器安装测试分词器 文档映射(字…

使用ELK收集解析nginx日志和kibana可视化仪表盘

文章目录 ELK生产环境配置filebeat 配置logstash 配置 kibana仪表盘配置配置nginx转发ES和kibanaELK设置账号和密码 ELK生产环境配置 ELK收集nginx日志有多种方案&#xff0c;一般比较常见的做法是在生产环境服务器搭建filebeat 收集nginx的文件日志并写入到队列&#xff08;k…

uniapp - 倒计时组件-优化循环时间倒计时

使用定时器的规避方法 为了避免定时器误差导致倒计时计算错误&#xff0c;可以采用一些规避方法&#xff0c;比如将倒计时被中断时的剩余时间记录下来&#xff0c;重新开启定时器时再将这个剩余时间加到新的计算中。同时&#xff0c;为了避免定时器延迟&#xff0c;可以在每次执…

Python数据分析实战-Series转DataFrame并将index设为新的一列(附源码和实现效果)

实现功能 Series转DataFrame并将index设为新的一列 实现代码 import pandas as pd# 创创建series series pd.Series([1, 2, 3, 4, 5])# 创建一个DataFrame对象 data {column_name: series} df pd.DataFrame(data)# 重新设置索引&#xff0c;将原有的索引作为新的一列 df.r…

GIT实战篇,教你如何使用GIT可视化工具

系列文章目录 手把手教你安装Git&#xff0c;萌新迈向专业的必备一步 GIT命令只会抄却不理解&#xff1f;看完原理才能事半功倍&#xff01; 快速上手GIT命令&#xff0c;现学也能登堂入室 GIT实战篇&#xff0c;教你如何使用GIT可视化工具 系列文章目录一、GIT有哪些常用工具…

2023高教社杯数学建模A题B题C题D题E题思路模型 国赛建模思路分享

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

如何截取视频中的一段视频?分享几种视频分割方法

当处理长视频时&#xff0c;视频分割可以使您更加高效。如果您只需要处理其中的一部分&#xff0c;而不是整个视频&#xff0c;那么分割视频可以使您更容易找到需要处理的部分。而且&#xff0c;分割视频还可以使您更容易在不同的项目之间重复使用视频片段。教大家几种简单的视…

基于Python的IOS自动化测试环境搭建

文章目录 一、测试架构介绍1.1 WebDriverAgent原理分析1.2 tidevice原理分析二、环境安装2.1 iOS 设备安装 WebDriverAgent2.2 安装iTunes2.3 安装tidevice2.4 安装facebook-wda自动化三、操作流程四、Weditor的安装和使用一、测试架构介绍 以下为测试架构原理图 手机端的WDA…

【vue2第十二章】ref和$refs获取dom元素 和 vue异步更新与$nextTick使用

ref和$refs获取dom元素 为什么会有 ref 和 $refs&#xff1f; 因为在vue页面中使用dom查找元素&#xff0c;不管你是不是在子组件里面查找&#xff0c;查找的都是整个页面的元素&#xff0c;如果你想查找单独组件里面的元素是不容易实现的&#xff0c;除非把每个组件的class写…

【Java转Go】Go中使用WebSocket实现聊天室(私聊+群聊)

目录 前言功能效果&#xff08;一人分饰多角.jpg&#x1f60e;&#xff09;用户上线、群聊私聊和留言下线 实现思路代码服务端 chat.go 完整代码客户端 html 完整代码 最后 前言 之前在Java中&#xff0c;用 springbootwebsocket 实现了一个聊天室&#xff1a;springbootwebso…

【广州华锐互动】利用AR远程指导系统进行机械故障排查,实现远程虚拟信息互动

随着工业自动化和智能化的不断发展&#xff0c;机械故障诊断已经成为了工业生产中的重要环节。为了提高故障诊断的准确性和效率&#xff0c;近年来&#xff0c;AR&#xff08;增强现实&#xff09;远程协助技术逐渐应用于机械故障诊断领域。本文将探讨AR远程协助技术在机械故障…

华为数通方向HCIP-DataCom H12-821题库(单选题:201-220)

第201题 BGP 协议用​​ beer default-route-advertise​​ 命令来给邻居发布缺省路由,那么以下关于本地 BGP 路由表变化的描述&#xff0c;正确的是哪一项? A、在本地 BGP 路由表中生成一条活跃的缺省路由并下发给路由表 B、在本地 BGP 路由表中生成一条不活跃的缺省路由&…

应用于伺服电机控制、 编码器仿真、 电动助力转向、发电机、 汽车运动检测与控制的旋变数字转换器MS5905P

MS5905P 是一款 12bit 分辨率的旋变数字转换器。 片上集成正弦波激励电路&#xff0c;正弦和余弦允许输入峰峰值 幅度为 2.3V 到 4.0V &#xff0c;可编程激励频率为 10kHz 、 12kHz 、 15kHz 、 20kHz 。 转换器可并行或串行输出角度 和速度对应的数字量。 MS5905…

动态贴纸、美颜SDK与AR:创造独特的互动体验

目前&#xff0c;动态贴纸、美颜SDK、增强现实&#xff08;AR&#xff09;等技术是比较热门的话题&#xff0c;它们所结合的新兴玩法更是收到大家推崇&#xff0c;正潜移默化的改变我们与数字世界互动的方式。 一、动态贴纸&#xff1a;个性化互动的开始 动态贴纸&#xff0c…

JVM-CMS

when 堆大小要求为4-8G 原理 初始标记&#xff1a;执行CMS线程->STW&#xff0c;标记GC Root直接关联的对象->低延迟 并发标记&#xff1a;执行CMS线程和业务线程&#xff0c;从GC Root直接关联的对象开始遍历整个对象图 重新标记&#xff1a;执行CMS线程->STW&a…