python 解析html之BeautifulSoup
代码如下:
# coding=utf-8
from BeautifulSoup import BeautifulSoup, Tag, NavigableString
from SentenceSpliter import SentenceSpliter
from os.path import basename,dirname,isdir,isfile
from os import makedirs
from shutil import copyfile
import io
import time
import re
class build_tpl:
def __init__(self,parse_file,build_tpl_name,cp_pic_dir,show_pic_dir,js_path,set_lang=2052):
'''参数说明:解析文件名,模版名称,保存图片路径,图片显示路径,js路径,当前语言(分句使用)'''
#取得解析文件目录路径
if len(dirname(parse_file))>1:
self.cur_dir = dirname(parse_file)+"/";
else:
self.cur_dir ="./";
#建立的模版文件文件名
self.build_tpl_name = build_tpl_name;
#图片cp到得目录
self.cp_pic_dir = cp_pic_dir;
#通过http展现图片的目录
self.show_pic_dir = show_pic_dir;
#加载js的路径
self.js_path = js_path;
#句段组
self.get_text_arr = [];
#当前图片名数组
self.cur_pic_arr = [];
#解析文件 取得soup 资源
self.soup = self.get_soup(parse_file);
#取得html文档中,段文档
self.get_text_arr = self.soup.body.findAll(text=lambda(x): len(x.strip()) > 0);
#取得句对
self.get_sentence_arr = self.parse_text(self.get_text_arr,set_lang);
#取得替换数组
self.replace_list = self.get_replace_list(self.get_text_arr,set_lang);
#取得图片数组
self.cur_pic_arr = self.soup.findAll('img');
#self.write_file_by_list("no.txt",self.get_text_arr);
#self.write_file_by_list("yes.txt",self.get_sentence_arr);
#保存词组到文件
def save_data_file(self):
file_name = self.build_tpl_name+".data";
self.write_file_by_list(file_name,self.get_data());
#取得词组
def get_data(self):
return self.get_sentence_arr;
#数组写入到文档
def write_file_by_list(self,file_name,write_arr):
file=io.FileIO(file_name,"w");
file.write(('\n'.join(write_arr)).encode('utf-8'));
file.close();
#字符串写入到文档
def write_file(self,file_name,file_contents):
file=io.FileIO(file_name,"w");
file.write(file_contents.encode('utf-8'));
file.close();
#建立图片hash目录
def get_pic_hash(self):
return time.strftime("%Y/%m/%d/");
#建立模版文件
def builder(self):
#没能发生替换的单词
bug_msg = [];
#进行内容模版替换
for i in range(len(self.get_text_arr)):
#替换
rep_str = "$rep_arr[{0}]".format(i);
try:
self.soup.body.find(text=self.get_text_arr[i]).replaceWith(self.replace_list[i]);
except AttributeError:
bug_msg.append(self.get_text_arr[i]);
#取得图片hash路径
hash_dir = self.get_pic_hash();
#构造展示图片路径
show_pic_dir = self.show_pic_dir+hash_dir;
#构造图片保存路径
cp_pic_dir = self.cp_pic_dir+hash_dir;
#判断保存图片的目录是否存在 不存在建立
if not isdir(cp_pic_dir):
makedirs(cp_pic_dir);
for pic_name in self.cur_pic_arr:
#进行图片路径替换
old_pic_src = pic_name['src'];
pic_name['src'] = show_pic_dir+old_pic_src;
#进行图片拷贝
cp_src_file = self.cur_dir+old_pic_src;
cp_dis_file = cp_pic_dir+old_pic_src;
copyfile(cp_src_file,cp_dis_file);
#建立bug信息的文档
#self.write_file_by_list("bug.txt",bug_msg);
#添加js
tag = Tag(self.soup,"script");
tag['type'] = "text/javascript";
tag['src'] =self.js_path+"jquery.js";
tag2 = Tag(self.soup,"script");
tag2['type'] = "text/javascript";
tag2['src'] =self.js_path+"init.js";
self.soup.head.insert(2,tag2);
self.soup.head.insert(2,tag);
#建立模版
self.write_file(self.build_tpl_name,self.soup);
#取得替换的html文件
def get_replace_html(self,rep_id,rep_data=""):
'''
参数说明:替换id,替换内容(为空的采用模版模式替换)
'''
if len(rep_data) > 0 :
rep_str = rep_data;
else:
rep_str = "$rep_arr[{0}]".format(rep_id);
return ""+rep_str+"";
#取得替换数组
def get_replace_list(self,text_arr,set_lang):
Sp = SentenceSpliter();
Sp.SetLang(set_lang);
temp_sentence = [];
jump_i = 0;
for text in text_arr:
SList = Sp.Split(text);
replace_temp = "";
if SList != None:
for item in SList:
replace_temp = replace_temp+self.get_replace_html(jump_i,item);
jump_i=jump_i+1;
else:
replace_temp = self.get_replace_html(jump_i,text);
jump_i=jump_i+1;
temp_sentence.append(replace_temp);
return temp_sentence;
#分句
def parse_text(self,text_arr,set_lang):
Sp = SentenceSpliter();
Sp.SetLang(set_lang);
temp_sentence = [];
for text in text_arr:
SList = Sp.Split(text);
if SList != None:
for item in SList:
temp_sentence.append(item);
else:
temp_sentence.append(text);
return temp_sentence;
#取得解析资源
def get_soup(self,parse_file):
try:
file=io.FileIO(parse_file,"r");
doc = file.readall();
file.close();
except IOError:
print 'ERROR: %s file not found!' %parse_file;
return False;
#开始解析html文档
return BeautifulSoup(''.join(doc));
if __name__ == "__main__":
from sys import argv, exit;
if len(argv) print "USAGE: python %s
exit(255);
if not isfile(argv[1]):
print "no such input file: %s" % argv[1]
exit(1)
paser_file = argv[1];#"html/testpic.html";
tpl_file = argv[2];
save_pic_path = argv[3];
show_pic_path = argv[4];
load_js_path = argv[5];
#解析开始 设置解析文件,模版名,图片保存路径,图片显示路径
so = build_tpl(paser_file,tpl_file,save_pic_path,show_pic_path,load_js_path);
#建立模版
so.builder();
#保存分句的句对
so.save_data_file();

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'avenir de HTML est plein de possibilités infinies. 1) Les nouvelles fonctionnalités et normes comprendront plus de balises sémantiques et la popularité des composants Web. 2) La tendance de la conception Web continuera de se développer vers une conception réactive et accessible. 3) L'optimisation des performances améliorera l'expérience utilisateur grâce à des technologies de chargement d'image réactives et de chargement paresseux.

Les extensions de code vs posent des risques malveillants, tels que la cachette de code malveillant, l'exploitation des vulnérabilités et la masturbation comme des extensions légitimes. Les méthodes pour identifier les extensions malveillantes comprennent: la vérification des éditeurs, la lecture des commentaires, la vérification du code et l'installation avec prudence. Les mesures de sécurité comprennent également: la sensibilisation à la sécurité, les bonnes habitudes, les mises à jour régulières et les logiciels antivirus.

PHP convient au développement Web et au prototypage rapide, et Python convient à la science des données et à l'apprentissage automatique. 1.Php est utilisé pour le développement Web dynamique, avec une syntaxe simple et adapté pour un développement rapide. 2. Python a une syntaxe concise, convient à plusieurs champs et a un écosystème de bibliothèque solide.

VS Code peut être utilisé pour écrire Python et fournit de nombreuses fonctionnalités qui en font un outil idéal pour développer des applications Python. Il permet aux utilisateurs de: installer des extensions Python pour obtenir des fonctions telles que la réalisation du code, la mise en évidence de la syntaxe et le débogage. Utilisez le débogueur pour suivre le code étape par étape, trouver et corriger les erreurs. Intégrez Git pour le contrôle de version. Utilisez des outils de mise en forme de code pour maintenir la cohérence du code. Utilisez l'outil de liaison pour repérer les problèmes potentiels à l'avance.

PHP est principalement la programmation procédurale, mais prend également en charge la programmation orientée objet (POO); Python prend en charge une variété de paradigmes, y compris la POO, la programmation fonctionnelle et procédurale. PHP convient au développement Web, et Python convient à une variété d'applications telles que l'analyse des données et l'apprentissage automatique.

VS Code est disponible sur Mac. Il a des extensions puissantes, l'intégration GIT, le terminal et le débogueur, et offre également une multitude d'options de configuration. Cependant, pour des projets particulièrement importants ou un développement hautement professionnel, le code vs peut avoir des performances ou des limitations fonctionnelles.

La clé de l'exécution du cahier Jupyter dans VS Code est de s'assurer que l'environnement Python est correctement configuré, de comprendre que l'ordre d'exécution du code est cohérent avec l'ordre cellulaire et d'être conscient des fichiers volumineux ou des bibliothèques externes qui peuvent affecter les performances. Les fonctions d'achèvement et de débogage du code fournies par VS Code peuvent considérablement améliorer l'efficacité du codage et réduire les erreurs.

VS Code peut non seulement exécuter Python, mais fournit également des fonctions puissantes, notamment: l'identification automatique des fichiers Python après l'installation d'extensions de Python, fournissant l'achèvement du code, la mise en évidence de la syntaxe, le débogage et d'autres fonctions. S'appuyant sur l'environnement Python installé, les extensions agissent comme l'édition de connexion de pont et l'environnement Python. Les fonctions de débogage incluent le réglage des points d'arrêt, le débogage étape par étape, la visualisation des valeurs variables et l'amélioration de l'efficacité de débogage. Le terminal intégré prend en charge l'exécution de commandes complexes telles que les tests unitaires et la gestion des packages. Prend en charge la configuration étendue et améliore les fonctionnalités telles que la mise en forme du code, l'analyse et le contrôle de version.
