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
amigo usará una herramienta sitemapX para escribir la ruta de destino en la página web en un archivo txt.
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
(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.
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:
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.
(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,
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.