【网络安全带你练爬虫-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.mzph.cn/news/68454.shtml

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

相关文章

企业如何充分借助大数据下精准营销?

技术的发展和智能终端的普及移动互联网用户的大规模增长使移动互联网快速发展&#xff0c;使中国移动互联网软件进入移动互联网时代越来越多地涉及到改变生活大家习惯。移动互联网时代的到来也意味着大数据时代的到来。精准营销数据方法&#xff0c;移动互联网和大数据的兴起不…

ZLMediaKit 重建docker包

1.下载容器到本地服务器并运行 #此镜像为github持续集成自动编译推送&#xff0c;跟代码(master分支)保持最新状态 docker run -id -p 1935:1935 -p 8080:80 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 9000:9000/udp zlmediakit/zlmedi…

App自动化测试持续集成效率提高50%

持续集成是一种开发实践&#xff0c;它倡导团队成员需要频繁的集成他们的工作&#xff0c;每次集成都通过自动化构建&#xff08;包括编译、构建、自动化测试&#xff09;来验证&#xff0c;从而尽快地发现集成中的错误。让正在开发的软件始终处于可工作状态&#xff0c;让产品…

拦截器和异常处理器

拦截器和异常处理器 拦截器 拦截器(Interceptor)&#xff0c;主要完成请求参数的解析、将页面表单参数赋给值栈中相应属性、执行功能检验、程序异常调试等工作。 准备 创建模块 如下为完整的项目结构 web.xml <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee&qu…

macos 不支持svn安装

macos 10.13可能不支持svn命令,所以要安装 xcode-select --install 弹窗在线安装失败的话只能手动下载安装 打开:Sign In - Apple 搜索Command Line Tools (macOS 10.13) 下载9.4.1版本直接安装后即可

利用vba处理Excel表格数据实现键值转化,适用于将编码转化成对应的文本

最近遇到了一个甲方需要提供系统登录的用户名单和对应的角色权限内容。无奈直接从数据库导出的数据对应的都是编码&#xff0c;没有转成中文&#xff0c;想着偷个懒能不能直接用Excel直接转&#xff0c;网上看了一下有修改单元格格式的&#xff0c;但需要编码是2到3个。多的就用…

TCP机制之连接管理(三次握手和四次挥手详解)

TCP的连接管理机制描述了连接如何创建以及如何断开! 建立连接(三次握手) 三次握手的过程 所谓建立连接就是通信双方各自要记录对方的信息,彼此之间要相互认同;这里以A B双方确立男女朋友关系为例: 从图中可以看出,通信双方各自向对方发起一个"建立连接"的请求,同时…

RK3568-i2c-适配8010rtc时钟芯片

硬件连接 从硬件原理图中可以看出&#xff0c;rtc时钟芯片挂载在i2c3总线上&#xff0c;设备地址需要查看芯片数据手册。编写设备树 &i2c3 {status "okay";rx8010: rx801032 {compatible "epson,rx8010";reg <0x32>;}; };使能驱动 /kernel/…

Redis布隆过滤器原理

其实布隆过滤器本质上要解决的问题&#xff0c;就是防止很多没有意义的、恶意的请求穿透Redis&#xff08;因为Redis中没有数据&#xff09;直接打入到DB。它是Redis中的一个modules&#xff0c;其实可以理解为一个插件&#xff0c;用来拓展实现额外的功能。 可以简单理解布隆…

【闭源期刊】Elsevier旗下,1区(TOP),3个月录用

闭源期刊 1区&#xff08;TOP&#xff09; 出版社&#xff1a;Elsevier 影响因子&#xff1a;IF&#xff08;2022&#xff09;8.5-9.0 期刊分区&#xff1a;JCR1区&#xff0c;中科院2区&#xff08;无预警记录&#xff09; 检索情况&#xff1a;SCIE&EI 双检&#xff…

slog正式版来了:Go日志记录新选择!

在大约一年前&#xff0c;我就写下了《slog&#xff1a;Go官方版结构化日志包[1]》一文&#xff0c;文中介绍了Go团队正在设计并计划在下一个Go版本中落地的Go官方结构化日志包&#xff1a;slog[2]。但slog并未如预期在Go 1.20版本[3]中落地&#xff0c;而是在golang.org/x/exp…

Vulnhub: Hogwarts: Bellatrix靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.228 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.228访问80端口 查看源码&#xff0c;提示ikilledsiriusblack.php和文件包含的参数名file 漏洞利用 ikilledsiriusblack.p…

【Eclipse】搭建python环境;运行第一个python程序helloword

目录 0.环境 1.需准备&搭建思路 2.搭建具体步骤 1&#xff09;查看是否安装过python 2&#xff09;安装eclipse 3&#xff09;安装和配置pyDev 3.创建第一个python程序具体步骤 1&#xff09;新建项目 2&#xff09;输入项目名字&#xff0c;和配置选项 3&#x…

elasticsearch的搜索补全提示

当用户在搜索框输入字符时&#xff0c;我们应该提示出与该字符有关的搜索项 拼音分词器 下载 要实现根据字母做补全&#xff0c;就必须对文档按照拼音分词&#xff0c;GitHub上有拼音分词插件 GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin…

【Linux】地址空间概念

目录 前言&#xff1a; 地址空间回顾 验证&#xff1a;一个变量是否会有两个值&#xff1f; 一. 什么是地址空间 虚拟地址与物理地址之间的关系 二. 地址空间是如何设计的 1. 回答一个变量两个值 2.扩展 继续深入理解 三. 为什么要有地址空间 原因&#xff1a; 1. 使…

基于SSM的新能源汽车在线租赁系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

LNMP 平台搭建(四十)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 搭建LNMP 一、安装Nginx 二、安装Mysql 三、安装PHP 四、部署应用 前言 LNMP平台指的是将Linux、Nginx、MySQL和PHP&#xff08;或者其他的编程语言&#xff0c;如…

【人月神话】深入了解软件工程和项目管理

文章目录 &#x1f468;‍⚖️《人月神话》的主要观点&#x1f468;‍&#x1f3eb;《人月神话》的主要内容&#x1f468;‍&#x1f4bb;作者介绍 &#x1f338;&#x1f338;&#x1f338;&#x1f337;&#x1f337;&#x1f337;&#x1f490;&#x1f490;&#x1f490;&a…

华为数通安全产品介绍

HiSecEngine USG12000系列防火墙&#xff08;以下简称USG12000系列&#xff09;是华为公司推出的首款T级AI防火墙&#xff0c;在网络边界实时防护已知与未知威胁&#xff0c;通常部署在云计算数据中心&#xff0c;大型企业及园区网出口&#xff0c;为数据中心、企业及园区网络提…

机器人中的数值优化(十三)——QP二次规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…