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


    目录

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

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

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

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

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

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

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

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


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

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

    1. import html
    2. data = '\u003cp\u003e(此处忽略一万个字)'
    3. # 解码HTML实体,并替换相应字符
    4. decoded_data = html.unescape(data).replace('


      '
      , '\n').replace('

      ','').replace('

      '
      ,'')
    5. # 输出结果
    6. print(decoded_data)



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

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

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

    代码:

    1. import re
    2. text = '…………(此处省略一万字)'
    3. # 提取URL
    4. urls = re.findall(r'', text)
    5. # 替换标签为URL,并添加换行符
    6. for url in urls:
    7. text = re.sub(r'', url + '\n', text, count=1)
    8. print(text)



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

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

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

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

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

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



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

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

    1. from docx import Document
    2. from docx.shared import Pt
    3. # 打开Word文档
    4. doc = Document('example.docx')
    5. # 获取上一行的字体大小
    6. previous_paragraph = doc.paragraphs[-1]
    7. previous_run = previous_paragraph.runs[-1]
    8. previous_font_size = previous_run.font.size
    9. # 要写入的文本内容
    10. new_text = '新的文本'
    11. # 在新行中写入文本
    12. new_paragraph = doc.add_paragraph()
    13. new_run = new_paragraph.add_run(new_text)
    14. # 设置新行的字体大小与上一行一致
    15. new_font = new_run.font
    16. new_font.size = previous_font_size
    17. # 保存修改后的Word文档
    18. doc.save('example_modified.docx')

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

    1. from docx import Document
    2. from docx.shared import Pt
    3. def word_info_w():
    4. # 打开Word文档
    5. doc = Document('test.docx')
    6. # 获取文档中所有段落的内容
    7. paragraphs = [p.text for p in doc.paragraphs]
    8. # 指定要插入内容的位置
    9. target_string = '附件:'
    10. insert_index = paragraphs.index(target_string) + 1 # 在目标字符串后面插入,所以需要加1
    11. # 获取上一行的字体大小
    12. previous_paragraph = doc.paragraphs[insert_index - 1]
    13. previous_run = previous_paragraph.runs[-1]
    14. previous_font_size = previous_run.font.size
    15. # 要插入的内容
    16. new_content = '测试title'
    17. # 在指定位置后插入内容
    18. new_paragraph = doc.paragraphs[insert_index].insert_paragraph_before(new_content)
    19. # 设置新插入内容的字体大小与上一行一致
    20. new_run = new_paragraph.runs[0]
    21. new_font = new_run.font
    22. new_font.size = previous_font_size
    23. # 保存修改后的Word文档
    24. doc.save('test.docx')
    25. if __name__ == '__main__':
    26. word_info_w()



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

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

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

    1. from docx import Document
    2. def insert_content(doc, insert_dict):
    3. # 获取文档中所有段落的内容
    4. paragraphs = [p.text for p in doc.paragraphs]
    5. for target_string, new_content in insert_dict.items():
    6. if target_string in paragraphs:
    7. # 指定要插入内容的位置
    8. insert_index = paragraphs.index(target_string) + 1 # 在目标字符串后面插入,所以需要加1
    9. # 获取上一行的字体大小
    10. previous_paragraph = doc.paragraphs[insert_index - 1]
    11. previous_run = previous_paragraph.runs[-1]
    12. previous_font_size = previous_run.font.size
    13. # 在指定位置后插入内容
    14. new_paragraph = doc.paragraphs[insert_index].insert_paragraph_before(new_content)
    15. # 设置新插入内容的字体大小与上一行一致
    16. new_run = new_paragraph.runs[0]
    17. new_font = new_run.font
    18. new_font.size = previous_font_size
    19. # 保存修改后的Word文档
    20. doc.save('test.docx')
    21. if __name__ == '__main__':
    22. # 打开Word文档
    23. doc = Document('test.docx')
    24. # 定义要插入的内容和位置的字典
    25. insert_dict = {
    26. '附件:': '测试title1',
    27. '目录:': '测试title2'
    28. }
    29. # 插入内容
    30. insert_content(doc, insert_dict)



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

    1. from docx import Document
    2. def insert_content(doc, target_string, new_content):
    3. # 获取文档中所有段落的内容
    4. paragraphs = [p.text for p in doc.paragraphs]
    5. if target_string in paragraphs:
    6. # 指定要插入内容的位置
    7. insert_index = paragraphs.index(target_string) + 1 # 在目标字符串后面插入,所以需要加1
    8. if insert_index < len(doc.paragraphs):
    9. # 在指定位置后插入内容
    10. doc.paragraphs[insert_index].insert_paragraph_before(new_content)
    11. # 保存修改后的 Word 文档
    12. doc.save('test.docx')
    13. if __name__ == '__main__':
    14. # 打开 Word 文档
    15. doc = Document('test.docx')
    16. # 定义要插入的内容和位置的字典
    17. insert_dict = {
    18. '指定字符1位置': '插入内容1',
    19. '指定字符2位置': '插入内容2',
    20. '指定字符3位置': '插入内容3'
    21. }
    22. for target_string, new_content in insert_dict.items():
    23. # 插入内容
    24. insert_content(doc, target_string, new_content)

    指定字体大小

    1. from docx import Document
    2. from docx.shared import Pt
    3. def insert_content(doc, target_string, new_content):
    4. # 获取文档中所有段落的内容
    5. paragraphs = [p.text for p in doc.paragraphs]
    6. if target_string in paragraphs:
    7. # 指定要插入内容的位置
    8. insert_index = paragraphs.index(target_string) + 1 # 在目标字符串后面插入,所以需要加1
    9. if insert_index < len(doc.paragraphs):
    10. # 在指定位置后插入内容
    11. paragraph = doc.paragraphs[insert_index]
    12. run = paragraph.insert_paragraph_before(new_content).runs[0]
    13. font = run.font
    14. font.size = Pt(12) # 设置字体大小为3号字体(12磅)
    15. # 保存修改后的 Word 文档
    16. doc.save('test.docx')
    17. if __name__ == '__main__':
    18. # 打开 Word 文档
    19. doc = Document('test.docx')
    20. # 定义要插入的内容和位置的字典
    21. insert_dict = {
    22. '指定字符1位置': '插入内容1',
    23. '指定字符2位置': '插入内容2',
    24. '指定字符3位置': '插入内容3'
    25. }
    26. for target_string, new_content in insert_dict.items():
    27. # 插入内容
    28. insert_content(doc, target_string, new_content)



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

    1. from docx import Document
    2. from docx.shared import Pt
    3. from docx.shared import Inches
    4. import requests
    5. def word_img_text_w(word, target_string):
    6. # 打开 Word 文档
    7. doc = Document('test.docx')
    8. # 获取文档中所有段落的内容
    9. paragraphs = [p.text for p in doc.paragraphs]
    10. if target_string in paragraphs:
    11. # 指定目标字符串的位置
    12. insert_index = paragraphs.index(target_string) + 1 # 在目标字符串后面插入,所以需要加1
    13. # 以换行符分割文本
    14. lines = word.split('\n')
    15. for line in lines:
    16. if line.startswith('https://'):
    17. # 下载图片
    18. response = requests.get(line)
    19. image_path = line.split('/')[-1] # 图片保存的本地路径,使用URL中的最后一部分作为文件名
    20. with open(image_path, 'wb') as f:
    21. f.write(response.content)
    22. # 插入图片到Word文档
    23. doc.paragraphs[insert_index].add_run().add_picture(image_path, width=Inches(4)) # 根据需要调整图片的宽度
    24. insert_index += 1
    25. else:
    26. # 插入文本到Word文档
    27. run = doc.paragraphs[insert_index].add_run(line)
    28. run.font.size = Pt(16) # 设置字体大小为16磅
    29. insert_index += 1
    30. # 保存Word文档
    31. doc.save("test.docx")
    32. if __name__ == '__main__':
    33. # 要插入的内容
    34. content = '''测试
    35. https://xx.png
    36. https://xxxx.png'''
    37. # 指定目标字符串
    38. target_string = '指定目标字符1'
    39. # 插入内容到Word文档
    40. word_img_text_w(content, target_string)

  • 相关阅读:
    多线程引发的安全问题
    Http请求-hutool工具类的使用
    智能网络安全网卡|这是不是你要的安全感
    vscode - vscode中使用svn插件进行提交代码
    数据结构——排序算法——归并排序
    【语音识别】MFCC+VAD端点检测智能语音门禁系统【含GUI Matlab源码 451期】
    【python】一篇玩转正则表达式
    HyperBDR新版本上线,自动化容灾兼容再升级!
    如何选择功放芯片?音质好的功放芯片性能详解
    【离散化】【 树状树状 】100246 将元素分配到两个数组中
  • 原文地址:https://blog.csdn.net/qq_53079406/article/details/132140855