¡Python automatizó el estilo de directorio de rastreo de la oficina para escribir el combate real de documentos de Word!

Al ver a mis amigos copiar y pegar repetidamente el directorio de la página web en la palabra todos los días, me siento muy imprudente. ¡Así que pensé en usar la función de oficina automatizada de Python para salvarlo! Por ejemplo, la siguiente imagen es el contenido en HTML. Quiero extraerlo y escribirlo en Word. También necesito traer el título del libro y nombrar la palabra. Una vez escrito, puede procesar por lotes. ! ! ¿No es maravilloso? O ( ̄︶ ̄) o Afortunadamente, mi
Inserte la descripción de la imagen aquí
amigo usará una herramienta sitemapX para escribir la ruta de destino en la página web en un archivo txt.
Inserte la descripción de la imagen aquí
Bibliotecas llamadas:
import time
import re
import urllib.request
import os
import pypandoc
from docx.oxml.ns import qn
from docx import Document
Todavía hay algunos puntos importantes a los que prestar atención en este pequeño proyecto:

(1) Analice 30 archivos HTML cada vez y luego deberá actualizar el archivo txt original; de lo contrario, los primeros 30 archivos HTML se procesarán cada vez.


#Obtener una lista de páginas web def input_html (txtname): 
    con open (txtname, 'r') como f: 
        content = f.read () 
    s1 = content.split ('\ n') # La cadena hablada se convierte en una list 
    html_num = len (s1) 
    # Número total de enlaces print ('El archivo contiene {} enlaces'.format (html_num)) 
    
    s2 = s1 [30:] # Los enlaces restantes 
    new_html =' \ n'.join (s2) #Update 
    new_html_num = len (s2) #Total number of links 
    print ('Completa esta tarea, quedan {} enlaces' .format (new_html_num)) 
    return new_html #Crea 

un nuevo documento, distinguido por tiempo 
import time 
nowtime = time. strftime ("% Y% m% d% H% M% S", time.localtime ()) # La hora actual se representa como un nuevo archivo 
con open ("sitemap" + nowtime + ".txt", "w" , encoding = 'utf-8') como f: 
    f.write (input_html ("sitemap.txt")) 
    f.cerrar () 
1234567891011121314151617181920

Inserte la descripción de la imagen aquí
(2) Para leer el archivo HTML y extraer el contenido requerido, debe usar expresiones regulares para extraer dos partes, una es el título y la otra es el contenido con la tabla de contenido.

import re 
import urllib.request #import request module 
def Parse_html (url): 
    res = urllib.request.urlopen (url) 
    #call urlopen () para obtener la interfaz de respuesta del servidor html = res.read (). decode (' utf-8 ') 
#Descodificar los datos de respuesta devueltos y asignarlos a html 
    return html html = Parse_html (url) #Extraer una 
parte del archivo fuente como la parte de contenido 
str1 = re.findall (' <div class = "DetailInfo" > ([\ s \ S] *?) <div class = "Column ElectronicIntro" ', html) 
#Tome la parte entre str1 [0] = str1 [0] .replace (' <div class = "Column ColumnCatalog" id = "columnCatalog" style = "display: none"> ',' <div class = "Column ColumnCatalog" id = "columnCatalog" style = ""> ') 
str1_1 = re.sub (' </span> [\ s] *? <li> ',' </span> \ n </li><li> ', str1 [0]) # 
Termina la parte faltante en parte </li> str1_2 = re.sub (' </span> [\ s] *? </ul> ',' </span> \ n </ li> </ul> ', str1_1) # Termine la parte que falta en parte </li> 
parte del archivo fuente como parte del título<li> ', str1 [0]) # falta el relleno en una parte </li> 
#Extraiga una str2 = re.findall ("<h1 [\ s \ S] *? </ h1> ", html) # Coincide con saltos de línea [\ s \ S] * ?, coincide con cualquier carácter intermedio, incluidos los saltos de línea

123456789101112131415

¿Cómo ver el enlace de la imagen de destino correspondiente a la página web? Use el navegador Chrome para abrir la página web anterior, luego presione F12, verá el código fuente de esta página web a la derecha, siga los tres pasos en la imagen de abajo, haga clic en la flecha pequeña, mueva el mouse a la imagen de destino, coloque el cursor , este El código fuente de la página web correspondiente a esta parte de destino se resaltará a la derecha. Puede ver la parte que enmarqué en rojo, y la parte entre comillas después de src es la conexión de esta imagen.
Inserte la descripción de la imagen aquí

Todavía hay dos problemas en el medio , uno falta, lo que hará que parte del contenido no se pueda visualizar; el otro problema style = "display: none" esta parte ocultará el directorio, por lo que debe reemplazarlo con style = "". Esta parte involucra la estructura de HTML y expresiones regulares .

(3) Combine el contenido extraído para formar un archivo HTML.

import os 
def write_html (título, contenido): 
    html1 = open ("n.html", "w") # escribe en html 
    html1.write (título) # 
    titlehtml1.write (contenido) # 
    contenthtml1.close () 
# 把 El el contenido procesado se escribe en el archivo HTML 
write_html (str2 [0], str1_2) 

123456789

(4) Escriba archivos HTML en Word

import pypandoc 
def html_docx (html_path, docx_path): 
    f = open (html_path, "r", encoding = 'gbk') 
    html1 = f.read () 
    salida = pypandoc.convert_text (html1, 'docx', 'html', archivo de salida = docx_path) # Convierta código html en docx #Escriba un 
nuevo archivo HTML en Word, con formato 
html_docx ("n.html", "file1.docx") 
1234567

Existe una dificultad en esta etapa, es decir, la importación de pypandoc, el servidor utilizado por la empresa se puede depurar sin problemas, pero la computadora de casa reportó un error NO se encontró pandoc. Consulte la figura siguiente para obtener más detalles:

Inserte la descripción de la imagen aquí
Encontré muchas formas de probar en Internet, principalmente siguiendo las pautas de notificación de errores, pero ninguna mejoró. Finalmente encontré una publicación https://blog.csdn.net/qq_43741748/article/details/105454719, "Descargar e instalar Pandoc (versión para Windows y Mac)" descargado del sitio web oficial de Pandoc https://www.pandoc.org/ instalación .html , simplemente ejecute el problema de instalación directamente.
Inserte la descripción de la imagen aquí
(5) Ajuste aún más el contenido de Word según las necesidades, principalmente ajustando la fuente a Microsoft Yahei , agregando un pie de página , nombrando el archivo con el título del contenido y almacenándolo.


#Modificar el estilo de la palabra, nombrar el archivo, agregar pie 
de página desde docx import Documento documento = Documento ('file1.docx') 
documento.paragraphs [0] .text = document.paragraphs [0] .text.replace ("[题库]" , "") 
document.paragraphs [0] .text = document.paragraphs [0] .text.replace ("[eBook]", "") 
f = document.paragraphs [0] .text 
filename = f # tomar el nombre del archivo 
sec = document.sections # Objeto de sección en el documento de 

Word sec0 = sec [0] # Obtener el objeto de capítulo 
font0 = sec0.footer # Devolver el objeto de pie de página 
#print (font0) 
# Establecer el pie de página # 
print (font0.paragraphs) 
font0_par = font0.paragraphs [0] 
font0_par.add_run ('Red de aprendizaje de Xinglanhai-examen de ingreso de posgrado, banco de preguntas de libros electrónicos, respuestas detalladas en video') 
de docx.oxml.ns import qn 
document.styles ['Normal']. font. nombre = u'Microsoft Yahei '
document.styles ['Normal'] ._ element.rPr.rFonts.set (qn ('w: eastAsia'), u'Microsoft Yahei ') # Guarde todas las fuentes en el párrafo 
document.save (' {}. docx '. formato (nombre de archivo)) 
1234567891011121314151617181920

La lista del primer paso debe recorrerse en un bucle. Es lo básico, por lo que no entraré en detalles. También hay una parte de manejo de excepciones que debe agregarse al realizar el bucle. Publique los resultados del procesamiento para que todos los vean,
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

En la parte del procesamiento de documentos docx, el título no se puede cambiar y debe mejorarse aún más en el futuro.

 

Supongo que te gusta

Origin blog.csdn.net/weixin_43881394/article/details/112521514
Recomendado
Clasificación