【网络安全带你练爬虫-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.hqwc.cn/news/101655.html

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

相关文章

ClickHouse 存算分离改造:小红书自研云原生数据仓库实践

ClickHouse 作为业界性能最强大的 OLAP 系统&#xff0c;在小红书内部被广泛应用于广告、社区、直播和电商等多个业务领域。然而&#xff0c;原生 ClickHouse 的 MPP 架构在运维成本、弹性扩展和故障恢复方面存在较大局限性。为应对挑战&#xff0c;小红书数据流团队基于开源 C…

嵌入式开发-11 Linux下GDB调试工具

目录 1 GDB简介 2 GDB基本命令 3 GDB调试程序 1 GDB简介 GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。 一般来说&#xff0c;GDB主要帮助你完成下面四个方面的功能&#xff1a; 1、启动你的程序&#xff0c;可以按照你的自定义的要求随心所欲的运行程序&#…

C语言之初阶总结篇

目录 NO.1 NO.2 NO.3 NO.4 NO.5 NO.6 NO.7 NO.8 NO.9 NO.10 NO.11 NO.12.概念tips NO.13.求最小公倍数 NO.14.最大公因数 NO.15.输入读取字符串 NO.16.倒置字符串 今天是一些C语言题目&#xff0c;最近天气炎热&#xff0c;多喝水。 NO.1 下面程序执行后&am…

C++:类和对象(二)

本文主要介绍&#xff1a;构造函数、析构函数、拷贝构造函数、赋值运算符重载、const成员函数、取地址及const取地址操作符重载。 目录 一、类的六个默认成员函数 二、构造函数 1.概念 2.特性 三、析构函数 1.概念 2.特性 四、拷贝构造函数 1.概念 2.特征 五、赋值…

软件设计模式(三):责任链模式

前言 前面荔枝梳理了有关单例模式、策略模式的相关知识&#xff0c;这篇文章荔枝将沿用之前的写法根据示例demo来体会这种责任链设计模式&#xff0c;希望对有需要的小伙伴有帮助吧哈哈哈哈哈哈~~~ 文章目录 前言 责任链模式 1 简单场景 2 责任链模式理解 3 Java下servl…

前端面试题JS篇(1)

JS 的各种位置&#xff0c;比如 clientHeight,scrollHeight,offsetHeight ,以及 scrollTop, offsetTop,clientTop 的区别 clientHeight&#xff1a;表示的是可视区域的高度&#xff0c;不包含 border 和滚动条offsetHeight&#xff1a;表示可视区域的高度&#xff0c;包含了 b…

[CISCN 2019华北Day1]Web1

文章目录 涉及知识点解题过程 涉及知识点 phar反序列化文件读取 解题过程 打开题目&#xff0c;注册用户为admin 进去发现有文件上传的功能&#xff0c;我们随便上传个图片 然后就有下载和删除两个功能 我们尝试抓包下载文件的功能 发现参数可控&#xff0c;我们尝试读取一下…

CDN+GitHub搭建图床

前期搭建博客的时候&#xff0c;老是遇到图片无法加载、加载出错等等问题&#xff0c;很是烦恼。于是想搭建一个图床&#xff0c;进行个人博客图片的存储、显示使用。 ​ 利用GitHubjsDelivrPicGo搭建免费图床&#xff0c;CDN图床就是这么朴实无华&#xff0c;是基于免费CDN与免…

JVM中JAVA对象和数组内存布局

对象 数组 在Java中&#xff0c;所有的对象都是一种特殊的数组&#xff0c;它们的元素可以是基本数据类型、其他对象引用或者其他任何类型。Java对象和数组的内存布局包含以下部分&#xff1a; 1.对象头&#xff08;Object Header&#xff09; 每个Java对象都有一个对象头&am…

与 vmx86 驱动程序的版本不匹配: 预期为 410.0,实际为 401.0

与 vmx86 驱动程序的版本不匹配: 预期为 410.0&#xff0c;实际为 401.0。 驱动程序“vmx86.sys”的版本不正确。请尝试重新安装 VMware Workstation。 我电脑历史上装过几个版本的vmware workstation: 怀疑是不兼容版本生成的vmx.86.sys 在系统中和该软件冲突&#xff0c;又没…

(源码版)2023 年高教社杯全国大学生数学建模竞赛-E 题 黄河水沙监测题一数据分析详解+Python代码

十分激动啊啊啊题目终于出来了&#xff01;&#xff01;官网6点就进去了结果直接卡死现在才拿到题目&#xff0c;我是打算A-E题全部做一遍。简单介绍一下我自己&#xff1a;博主专注建模四年&#xff0c;参与过大大小小数十来次数学建模&#xff0c;理解各类模型原理以及每种模…

【C++ Core Guidelines解析】深入理解现代C++的特性和原理

文章目录 &#x1f468;‍⚖️《C Core Guidelines解析》的主要观点&#x1f468;‍&#x1f3eb;《C Core Guidelines解析》的主要内容&#x1f468;‍&#x1f4bb;作者介绍 &#x1f338;&#x1f338;&#x1f338;&#x1f337;&#x1f337;&#x1f337;&#x1f490;&a…