Python automatisé le style de répertoire d'exploration de bureau pour écrire un document Word combat réel!

En voyant mes amis copier et coller à plusieurs reprises le répertoire de la page Web au mot tous les jours, je me sens très imprudent. J'ai donc pensé à utiliser la fonction bureautique automatisée de Python pour le sauver! Par exemple, l'image suivante est le contenu en HTML. Je veux l'extraire et l'écrire en mot. Je dois également apporter le titre du livre et nommer le mot. Une fois écrit, vous pouvez traiter par lots! ! ! N’est-ce pas merveilleux? O ( ̄︶ ̄) o Heureusement, mon
Insérez la description de l'image ici
ami utilisera un outil sitemapX pour écrire le chemin cible de la page Web dans un fichier txt.
Insérez la description de l'image ici
Bibliothèques appelées:
import time
import re
import urllib.request
import os
import pypandoc
from docx.oxml.ns import qn
from docx import Document
Il y a encore quelques points importants à prendre en compte dans ce petit projet:

(1) Analyser 30 fichiers HTML à chaque fois, puis mettre à jour le fichier txt d'origine, sinon les 30 premiers fichiers HTML seront traités à chaque fois.


#Obtenir une liste de pages Web def input_html (txtname): 
    avec open (txtname, 'r') as f: 
        content = f.read () 
    s1 = content.split ('\ n') # La chaîne parlante est convertie en list 
    html_num = len (s1) 
    #Nombre total de liens print ('Le fichier contient {} links'.format (html_num)) 
    
    s2 = s1 [30:] # Les liens restants 
    new_html =' \ n'.join (s2) #Update 
    new_html_num = len (s2) #Total number of links 
    print ('Terminez cette tâche, il reste {} liens à gauche' '.format (new_html_num)) 
    return new_html #Créez 

un nouveau document, distingué par le temps 
import time 
nowtime = time. strftime ("% Y% m% d% H% M% S", time.localtime ()) # L'heure actuelle est représentée comme un nouveau fichier 
avec open ("sitemap" + nowtime + ".txt", "w" , encoding = 'utf-8') comme f: 
    f.write (input_html ("sitemap.txt")) 
    f.close () 
1234567891011121314151617181920

Insérez la description de l'image ici
(2) Pour lire le fichier HTML et extraire le contenu requis, vous devez utiliser des expressions régulières pour extraire deux parties, l'une est le titre et l'autre est le contenu avec la table des matières.

import re 
import urllib.request #import module de requête 
def Parse_html (url): 
    res = urllib.request.urlopen (url) 
    #call urlopen () pour obtenir l'interface de réponse du serveur html = res.read (). decode (' utf-8 ') 
#Décodez les données de réponse renvoyées et affectez-les à html 
    return html html = Parse_html (url) # Extraire une 
partie du fichier source comme partie de contenu 
str1 = re.findall (' <div class = "DetailInfo" > ([\ s \ S] *?) <div class = "Column ElectronicIntro" ', html) 
#Take the part between 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]) # 
Terminer la partie manquante en partie </li> str1_2 = re.sub (' </span> [\ s] *? </ul> ',' </span> \ n </ li> </ul> ', str1_1) #Terminer la partie manquante en partie </li><li> ', str1 [0]) # fill missing in part </li> 
# Extraire une str2 = re.findall ("<h1 [\ s \ S] *? </ h1> ", html) #Matches with line breaks [\ s \ S] * ?, correspond à n'importe quel caractère intermédiaire, y compris les sauts de ligne

# Extraire une 
partie du fichier source comme partie titre 123456789101112131415

Comment afficher le lien de l'image cible correspondant à la page Web? Utilisez le navigateur Chrome pour ouvrir la page Web ci-dessus, puis appuyez sur F12, vous verrez le code source de cette page Web sur la droite, suivez les trois étapes dans l'image ci-dessous, cliquez sur la petite flèche, déplacez la souris sur l'image cible, survolez , this Le code source de la page Web correspondant à cette partie cible sera mis en évidence à droite. Vous pouvez voir la partie que j'ai encadrée en rouge, et la partie entre guillemets après src est la connexion de cette image.
Insérez la description de l'image ici

Il y a encore deux problèmes au milieu , l'un est manquant, ce qui rendra une partie du contenu non affichable; l'autre problème style = "display: none" cette partie masquera le répertoire, vous devez donc le remplacer par style = "". Cette partie concerne la structure du HTML et des expressions régulières .

(3) Combinez le contenu extrait pour former un fichier HTML.

import os 
def write_html (title, content): 
    html1 = open ("n.html", "w") # write into html 
    html1.write (title) # 
    titlehtml1.write (content) # 
    contenthtml1.close () 
# 把 Le le contenu traité est écrit dans le fichier HTML 
write_html (str2 [0], str1_2) 

123456789

(4) Écrire des fichiers HTML dans Word

import pypandoc 
def html_docx (html_path, docx_path): 
    f = open (html_path, "r", encoding = 'gbk') 
    html1 = f.read () 
    output = pypandoc.convert_text (html1, 'docx', 'html', fichier de sortie = docx_path) # Convertir le code html en docx # Ecrire un 
nouveau fichier HTML dans Word, au format 
html_docx ("n.html", "file1.docx") 
1234567

Il y a une difficulté à ce stade, c'est-à-dire l'importation de pypandoc.Le serveur utilisé par l'entreprise peut être débogué sans problème, mais l'ordinateur à la maison a signalé une erreur AUCUN pandoc n'a été trouvé. Voir la figure ci-dessous pour plus de détails:

Insérez la description de l'image ici
J'ai trouvé de nombreuses façons d'essayer sur Internet, principalement en suivant les directives de signalement des erreurs, mais aucune ne s'est améliorée. Enfin trouvé un post https://blog.csdn.net/qq_43741748/article/details/105454719, "Téléchargez et installez Pandoc (version Windows et Mac)" téléchargé depuis le site officiel de Pandoc https://www.pandoc.org/ installation .html , exécutez simplement le problème d'installation directement.
Insérez la description de l'image ici
(5) Ajustez davantage le contenu Word en fonction des besoins, principalement en ajustant la police à Microsoft Yahei , en ajoutant un pied de page , en nommant le fichier avec le titre du contenu et en le stockant.


#Modifier le style du mot, nommer le fichier, ajouter un pied 
de page depuis l'importation docx Document document = Document ('file1.docx') 
document . 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 # prendre le nom du fichier 
sec = document.sections # Objet de section dans le document 

Word sec0 = sec [0] # Récupère l'objet de chapitre 
font0 = sec0.footer # Renvoie l'objet de pied de page 
#print (font0) 
# Définit le pied de page # 
print (font0. 
Paragraphs ) font0_par = font0. Paragraphs [0] 
font0_par.add_run ('Examen d'entrée au réseau d'apprentissage Xinglanhai-troisième cycle, banque de questions e-book, réponse vidéo détaillée') 
de docx.oxml.ns import qn 
document.styles ['Normal']. font. nom = u'Microsoft Yahei '
document.styles ['Normal'] ._ element.rPr.rFonts.set (qn ('w: eastAsia'), u'Microsoft Yahei ') # Enregistrez toutes les polices dans le paragraphe 
document.save (' {}. docx '. format (nom de fichier)) 
1234567891011121314151617181920

La liste de la première étape doit être parcourue en boucle. Ce sont les bases, donc je n'entrerai pas dans les détails. Il y a aussi une partie de gestion des exceptions qui doit être ajoutée lors de la boucle. Affichez les résultats du traitement pour que tout le monde puisse les voir,
Insérez la description de l'image ici
Insérez la description de l'image ici

Dans le cadre du traitement des documents docx, le titre ne peut pas être changé, et il doit encore être amélioré à l'avenir!

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43881394/article/details/112521514
conseillé
Classement