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

news2024/12/23 13:07:00

目录

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

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

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

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

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

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

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

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


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

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

import html

data = '\u003cp\u003e(此处忽略一万个字)'

# 解码HTML实体,并替换相应字符
decoded_data = html.unescape(data).replace('<p><br></p>', '\n').replace('<p>','').replace('</p>','')


# 输出结果
print(decoded_data)



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

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

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

代码:

import re

text = '<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 Pt

def 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.font
    new_font.size = previous_font_size

    # 保存修改后的Word文档
    doc.save('test.docx')

if __name__ == '__main__':
    word_info_w()



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

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

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

from docx import Document

def 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.font
            new_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 Document

def 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  # 在目标字符串后面插入,所以需要加1

        if 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 Pt

def 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  # 在目标字符串后面插入,所以需要加1

        if insert_index < len(doc.paragraphs):
            # 在指定位置后插入内容
            paragraph = doc.paragraphs[insert_index]
            run = paragraph.insert_paragraph_before(new_content).runs[0]
            font = run.font
            font.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 requests

def 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 += 1
            else:
                # 插入文本到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.coloradmin.cn/o/972955.html

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

相关文章

算法笔记:平衡二叉树

1 介绍 平衡二叉树&#xff08;AVL树&#xff09;是一种特殊的二叉搜索树&#xff08;BST&#xff09;&#xff0c;它自动确保树保持低高度&#xff0c;以便实现各种基本操作&#xff08;如添加、删除和查找&#xff09;的高效性能。 ——>时间都维持在了O(logN)它是一棵空…

网络安全—0基础入门学习手册

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防…

windows下配置pcl-python

1.前提概要 python版本的pcl基本上只有3.6的能用&#xff0c;本人3.7/3.8均进行了尝试。 因为很多博主提到的Gtk已经下载不了了&#xff0c;实在是维护人员太懒了。如果你看到这里&#xff0c;可以试试下面这个链接&#xff0c;说不定又能用了呢。 Gtk下载&#xff1a;http:…

vmware网卡(网络适配器)桥接、NAT、仅主机3种模式解析

Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09; Windows系统安装好vmware后&#xff0c;在网络连接中会生成VMnet1和VMnet8两个虚拟网卡。 VMnet1作用于仅主机模式&#xff0c;VMnet8作…

Java作业3

1.下面代码的运行结果是&#xff08;C&#xff09; public static void main(String[] args){String s;System.out.println("s"s);}A.代码编程成功&#xff0c;并输出”s” B.代码编译成功&#xff0c;并输出”snull” C.由于String s没有初始化&#xff0c;代码不…

Mqtt学习笔记--接入阿里云(2)

概述 在阿里云IoT平台中&#xff0c;MQTT协议是一种重要的连接方式&#xff0c;可以用于设备与平台之间的通信。通过配置设备的Topic和订阅规则&#xff0c;设备可以在平台上发布/订阅消息&#xff0c;实现设备状态的监控、控制和数据的传输。同时&#xff0c;阿里云IoT平台还提…

算法笔记 二叉搜索树

二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;是一种数据结构&#xff0c;用于存储具有可比较键&#xff08;通常是数字或字符串&#xff09;的元素 1 结构特点 节点结构&#xff1a;每个节点都有一个键和两个子节点&#xff08;左子节点和右子…

JavaWeb | 常用的HTML(JavaWeb)标签

目录&#xff1a; HTML简介HTML的基本结构HTML的常用标签&#xff1a;“标题” 标签“换行” 标签“段落” 标签“水平线” 标签“文字” 标签“粗体” 标签“下划线” 标签“斜体” 标签“上标” 标签“下标” 标签“闪烁” 标签表示 “空格”“列表” 标签&#xff1a;无序列…

VGA OUT 的PCB设计注意事项

VGA(Video Graphics Array)即视频图形阵列&#xff0c;具有分辨率高、显示速率快、颜色丰富等优点。VGA接口不但是CRT显示设备的标准接口&#xff0c;同样也是LcD液晶显示设备的标准接口&#xff0c;具有广泛的应用范围。 VGA OUT PCB设计注意事项&#xff1a; 1、整体布局时&…

PCIe 配置空间:Command 寄存器

在 type 0 header 中,command 寄存器的位置如下图所示: 在 type 1 header 中,command 寄存器的位置如下图所示: Command 寄存器的结构如下图: 对于 PCIe,只有 Bit 0/1/2/6/8/10 是有效的,其他必须配置为 0 。 IO Space Enable 该位用于控制设别如何响应 I/O 空间的访…

土著刷题Plus专业版对外开放入驻|在线组卷刷题学习平台|纯净无广|独立小程序|VIP功能全面开放|支持自定义品牌名称和Logo

专业版对外开放入驻 土著刷题Plus专业版&#xff0c;以【录题-分组-刷题-考试】为中心打造一套完备的在线组卷刷题学习平台&#xff0c;自定义品牌名称和Logo&#xff0c;入驻后&#xff0c;您将拥有自己独立的企业级专业运营管理平台。 土著刷题Plus专业版对比个人版优势&…

QT实现TCP通信(服务器与客户端搭建)

一、TCP通信框架 二、QT中的服务器操作 创建一个QTcpServer类对象&#xff0c;该类对象就是一个服务器调用listen函数将该对象设置为被动监听状态&#xff0c;监听时&#xff0c;可以监听指定的ip地址&#xff0c;也可以监听所有主机地址&#xff0c;可以通过指定端口号&#x…

软件上线测评报告怎么做?

软件上线测试 软件上线前必须经过一个整体的测评&#xff0c;从而帮助企业了解软件的运行情况。软件上线测评检测报告&#xff08;软件产品测试报告&#xff09;也通常被称为&#xff1a;科技项目验收测试报告、&#xff08;软件类&#xff09;科技成果鉴定测试、软件检测报告…

MySql学习笔记04——DDL

DDL 建表语法 建表属于DDL语句&#xff0c;DDL语句包括create drop alter create table 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型,.. );表名一般建议使用t_开头&#xff0c;可读性更强。 Mysql数据类型 varchar 可变长度的字符串&#xff0c;最长为255&…

Promise常用方法笔记

mixin.methods.getList(xxx) 是axios的二次封装 是通过Promise进行基本封装 let a mixin.methods.getList(toosSet.gettype);let b mixin.methods.getList(toosSet.gettypes);let c mixin.methods.getList(toosSet.gettypess);Promise.all([a, b, c]).then((res) > {aler…

【图解RabbitMQ-2】图解JMS规范与AMQP协议是什么

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…

基于卡尔曼滤波的锂电池状态估计MATLAB仿真及程序

完整资源请查看主页置顶博客&#xff08;专享优惠&#xff09; 该项目的目的是估计锂电池的荷电状态(SOC)。主要完成了扩展卡尔曼滤波(EKF)的实验、参数辨识和仿真。 项目中包括锂电池模型建立、参数辨识与验证、SOC估计采用扩展卡尔曼滤波(EKF)&#xff0c;使用了两种方式实…

CSS中如何实现一个自适应正方形(宽高相等)的元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐利用padding百分比⭐2. 利用::before伪元素⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对W…

Linux(基础IO)

Linux&#xff08;基础IO&#xff09; 前言C语言文件IO什么叫当前路径stdin/stdout/stderr 系统文件IOopenclosewriteread 文件描述符文件描述符的分配规则 重定向输出重定向原理追加重定向原理输入重定向原理dup2添加重定向功能到minishell 缓冲区模拟实现一个缓冲区 理解文件…

BCSP-玄子Share-Java框基础_解析XML

二、XML 2.1 XML 简介 XML&#xff08;Extensible Markup Language&#xff09;&#xff0c;可扩展标记语言 2.1.1 特点 XML 与操作系统、编程语言的开发平台无关规范统一&#xff0c;实现不同系统之间的数据交换 2.1.2 作用 数据存储数据交换数据配置 2.1.3 XML 文档结…