专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Python » beautifulsoup:python 解析html的BeautifulSoup »正文

beautifulsoup:python 解析html的BeautifulSoup

来源: 发布时间:星期一, 2009年9月7日 浏览:14次 评论:0
复制代码 代码如下:

# coding=utf-8
from BeautulSoup import BeautulSoup, 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
build_tpl:
def __init__(self,parse_file,build_tpl_name,cp_pic_dir,show_pic_dir,js_path,_lang=2052):
'''参数介绍说明:解析文件名模版名称保存图片路径图片显示路径js路径当前语言(分句使用)'''
#取得解析文件目录路径
len(dirname(parse_file))>1:
self.cur_dir = dirname(parse_file)+"/";
:
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,_lang);
#取得替换
self.replace_list = self.get_replace_list(self.get_text_arr,_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):
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):
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;
#判断保存图片目录是否存在 不存在建立
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替换内容(为空采用模版模式替换)
'''
len(rep_data) > 0 :
rep_str = rep_data;
:
rep_str = "$rep_arr[{0}]".format(rep_id);
"<span sty=\"data\" id=\"rep_"+str(rep_id)+"\">"+rep_str+"</span>";
#取得替换
def get_replace_list(self,text_arr,_lang):
Sp = SentenceSpliter;
Sp.SetLang(_lang);
temp_sentence = ;
jump_i = 0;
for text in text_arr:
SList = Sp.Split(text);
replace_temp = "";
SList != None:
for item in SList:
replace_temp = replace_temp+self.get_replace_html(jump_i,item);
jump_i=jump_i+1;
:
replace_temp = self.get_replace_html(jump_i,text);
jump_i=jump_i+1;
temp_sentence.append(replace_temp);
temp_sentence;
#分句
def parse_text(self,text_arr,_lang):
Sp = SentenceSpliter;
Sp.SetLang(_lang);
temp_sentence = ;
for text in text_arr:
SList = Sp.Split(text);
SList != None:
for item in SList:
temp_sentence.append(item);
:
temp_sentence.append(text);
temp_sentence;
#取得解析资源
def get_soup(self,parse_file):
try:
file=io.FileIO(parse_file,"r");
doc = file.readall;
file.close;
except IOError:
pr 'ERROR: %s file not found!' %parse_file;
False;
#开始解析html文档
BeautulSoup(''.join(doc));
__name__ "____":
from sys import argv, exit;
len(argv) < 3:
pr "USAGE: python %s <input-file> <output-file>" % argv[0]
exit(255);
not isfile(argv[1]):
pr "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;

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: