python制html表格文档格式.docx
- 文档编号:19878328
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:8
- 大小:21.51KB
python制html表格文档格式.docx
《python制html表格文档格式.docx》由会员分享,可在线阅读,更多相关《python制html表格文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
家电市场
女装市场
男装市场
童装童鞋
女鞋市场
男鞋市场
内衣市场
箱包市场
服饰配件
珠宝饰品
美容市场
母婴市场
家居市场
日用市场
食品/保健
运动鞋服
运动户外
汽车用品
玩具市场
文化用品市场
爱好市场生活服务
如果有乱码,可能是与网页编码不一致,需要替换最后一句deconde()的参数,我在香港淘宝默认用的是繁体编码。
各位可以copy上面的代码自己试试,把淘宝的商品目录抓下来,就是这么简单。
稍微改改,就可以抽取二级分类等其他信息
python的sgmlparser模块处理html解析非常的方便,它是处理网页解析的好帮手,能够将html处理分成三步:
将html分解成它的组成片段,对片段进行加工,接着将片段再重新合成html。
第一步是通过sgmllib.py来完成的,它是标准python库的一部分。
理解本章的关键是要知道html不只是文本,更是结构化文本。
这种结构来源于开始与结束标记的或多或少分级序列。
通常您并不以这种方式处理html,而是以文本方式在一个文本编辑中对其进行处理,或以可视的方式在一个浏览器中进行浏览或页面编辑工具中进行编辑。
sgmllib.py表现出了html的结构。
sgmllib.py包含一个重要的类:
sgmlparser。
sgmlparser将html分解成有用的片段,比如开始标记和结束标记。
在它成功地分解出某个数据为一个有用的片段后,它会根据所发现的数据,调用一个自身内部的方法。
为了使用这个分析器,您需要子类化sgmlparser类,并且覆盖这些方法。
这就是当我说它表示了html结构的意思:
html的结构决定了方法调用的次序和传给每个方法的参数。
sgmlparser将html分析成8类数据,然后对每一类调用单独的方法:
开始标记(starttag)
是开始一个块的html标记,像、、或
等,或是一个独一的标记,
像
或等。
当它找到一个开始标记tagname,
sgmlparser将查找名为start_tagname或do_tagname的方法。
例如,当它找到一个
标记,它将查找一个start_pre或do_pre的方法。
如果找到了,sgmlparser会使用这个标记的属性列表来调用这个方法;
否则,它用这个标记的名字和属性列表来调用unknown_starttag方法。
结束标记(endtag)
是结束一个块的html标记,像、、或
等。
当找到一个结束标记时,sgmlparser将查找名为end_tagname的方法。
如果找到,sgmlparser调用这个方法,否则它使用标记的名字来调用unknown_endtag。
字符引用(characterreference)
用字符的(python制html表格)十进制或等同的十六进制来表示的转义字符,
像。
当找到,sgmlparser使用十进制或等同的十六进制字符文本来调用handle_charref。
实体引用(entityreference)
html实体,像。
当找到,sgmlparser使用html实体的名字来调用
handle_entityref。
注释(comment)
html注释,包括在之间。
当找到,sgmlparser用注释内容来调用handle_comment。
处理指令(processinginstruction)
html处理指令,包括在之间。
当找到,sgmlparser用处理指令内容来调用handle_pi。
声明(declaration)
html声明,如doctype,包括在之间。
当找到,sgmlparser用声明内容来调用handle_decl。
文本数据(textdata)
文本块。
不满足其它7种类别的任何东西。
当找到,sgmlparser用文本来调用handle_data。
重要
python2.0存在一个bug,即sgmlparser完全不能识别声明(handle_decl永远不会调用),
这就意味着doctype被静静地忽略掉了。
这个错误在python2.1中改正了。
sgmllib.py所附带的一个测试套件举例说明了这一点。
您可以运行sgmllib.py,
在命令行下传入一个html文件的名字,然后它会在分析标记和其它元素的同时将它们打印出来。
它的实现是通过子类化sgmlparser类,然后定义unknown_starttag,unknown_endtag,handle_data
和其它方法来实现的。
这些方法简单地打印出它们的参数。
如果要详细的了解pythonsgmlparser的用法的话,可以看看pythonsgmlparser的文档,下面放上个我用pythonsgmlparsr写的例子,希望对大家有帮助:
#encoding=utf-8
#@description:
baidutibacontent
importsys
importre
importhttplib
importurllib
classbaidutiebaparser(sgmlparser):
在XX贴吧里采集相应的关键字的标题
defreset(self):
sgmlparser.reset(self)
self.info=[]#
self.q_check=0
self.num=0
self.strcontent=
defstart_td(self,tag):
匹配标签
iflen(tag)!
=0andtag[0][1]==s:
self.num=self.num+1
self.q_check=1
处理文本
txt=text.strip()
iftxtandself.q_check:
foriinchecklist:
pipei=r%s%str(i)#在要匹配的信息里找到和关键字匹配
check_pan=pile(pipei)
ifcheck_pan.search(txt)isnotnone:
self.info.append(txt)
else:
continue
self.strcontent=$|$.join(self.info)
defend_td(self):
匹配
############################################配置信息
#############################
keylist=[旅游]#贴吧名称
checklist=[张家界,韩国]#要查询的关键字
content={}#采集内容
forminkeylist:
page=0
keyword=urllib.quote(m.decode(utf-8).encode(gbk))
foriinxrange(10):
url=
data=urllib.urlopen(url).read()
data=unicode(data,gbk).encode(utf-8)
parser=baidutiebaparser()
parser.feed(data)
content[i+1]=parser.strcontent
page=page+50
forkincontent.keys():
printk
printcontent[k]
篇二:
【python】统计漏洞扫描html报表
【python】统计漏洞扫描html报表
前段时间在做项目时需要处理个漏洞扫描html报表,该报表是包含900+个ip的高、中、低风险的漏洞扫描报告,目标是将每个ip所有的高、中风险统计出来。
而该报表是按漏洞为主键的,即显示某漏洞受影响的ip有x.x.x.x;
y.y.y.y如果是纯手工去整的话恐怕会疯掉,于是写了个python脚本。
该脚本思路就是根据报表生成规则,应用正则表达式将需要的信息提取出来保存到.csv文件,用excel打开即可得到统计结果。
时间仓促,只用了半天时间写出来,有个遗留问题是写进.csv文件是用unicode编码,直接用excel打开的则会变乱码(win8+office20xx),后面也懒得去修补了,临时解决方法是在excel建个空表,“数据->
自文本”来导入即可。
#!
/usr/bin/envpython
#-*-coding:
gbk-*-
使用方法:
在命令行中传递主机报表所在的文件夹即可,会在脚本当前目录生成结果。
by:
terry
importcodecs
importos
defprogress(width,precent):
#显示百分比与进度表
print"
%d%%[%s]\r"
%(precent,(%%-%ds%width)%(width*precent/100*=)),ifprecent>
=100:
sys.stdout.flush()
defflaw_high(html):
#从html中匹配出高风险的漏洞名称
pattern=pile(r([\w\w]*))
match=pattern.findall(html)
returnmatch
defflaw_middle(html):
#从html中匹配出中风险的漏洞名称
defeachhost(file_route,save_route):
读取主机报表file_route文件,并保存到save_route文件
#file_route="
1.html"
file=codecs.open(file_route,"
r"
"
utf-8"
)
contents=file.read()
#printcontents
pattern=pile(r([\d]+.[\d]+.[\d]+.[\d]+))
ip=pattern.findall(contents)#从主机报表中获取主机ip,并写进文件#printip[0]
f_high=flaw_high(contents)
file_forwrite=codecs.open(save_route,"
a"
file_forwrite.write(ip[0])
fori_inf_high:
file_forwrite.write(u,高风险,+i_+\r\n)
f_middle=flaw_middle(contents)
fori_inf_middle:
file_forwrite.write(u,中风险,+i_+\r\n)
iflen(f_high)==0andlen(f_middle)==0:
file_forwrite.write(\r\n)
file_forwrite.close()
file.close()
deflistFiles(dir_route,save_route):
从主机报表路径dir_route中遍历主机报表,并保存到save_route
total=0
foriinos.listdir(dir_route):
#遍历html文件,即所有主机报表
ifi.endswith("
html"
):
total+=1
i=0
fori_fileinos.listdir(dir_route):
#将所有主机报表逐一处理,并计算百分比ifi_file.endswith("
i+=1
rate_num=int((float(i)/float(total))*100)
progress(50,rate_num)
eachhost(dir_route+"
\\"
+i_file,save_route)
if__name__==__main__:
主函数,简单判断输入是否正确
#eachhost("
#printsys.path[0]
save_route="
whilelen(save_route)==0andlen(sys.argv)>
1:
printu"
请输入生成文件名:
save_route=raw_input()
save_route=sys.path[0]+"
+save_route+"
.csv"
ifos.path.exists(save_route):
该文件名已存在,请重新输入!
!
printsave_route
iflen(sys.argv)>
listFiles(sys.argv[1],save_route)
printu请输入主机报表路径!
!
\r\n如:
d:
\\script.pyd:
\\scan_report\\hosts
最后还添加了个进度条显示,呵呵。
。
篇三:
python表格
/chapterFourteen
14网格(grid)控件
本章内容包括:
创建网格(grid)添加行和单元格(cell),并且处理列的首部使用一个自定义的单元格(cell)描绘器(renderer)创建自定义的编辑器捕获用户事件
网格控件大概是wxpython中最复杂和最灵活的一个窗口部件。
在这一章,你将有机会接触到这个控件的许多特性。
我们将讨论如何输入数据到网格控件以及如何处理该控件的显示属性,并且我们还将讨论自定义编辑器和描绘器。
网格控件使你能够在一个类似电子表格格
式的网格中显示表格数据。
该控件允许你为行和列指定标签,以及通过拖动网格线来改变网格的大小,并且可以为每个单元格单独指定字体和颜色属性。
在最常见的情况下,你一般会显示一个简单的字符串值。
然而,你也能为任一单元格指定一个自定义的描绘器,以使你能够显示不同的数据;
你可以有编辑表中的单元格,并且对不同的数据使用不同类型的编辑器。
你还能够创建你自己自定义的描绘器和编辑器,这使得你在单元格数据的显示和处理上可以非常的灵活,几乎没有什么限制。
网格控件还有大量的鼠标和键盘事件,你可以程序中捕获它们并用来触发相关的代码。
我们将通过展示两个创建wxpython网格的方法来作为我们讨论的开始。
创建你的网格
网格控件是用以显示一个二维的数据集的。
要使用该控件显示有用的信息,你需要告诉该控件它工作所基于的是什么数据。
在wxpython中,有两种不同的机制用于在网格控件中处理数据,它们之间在处理数据的添加,删除和编辑的方式上有些许的不同。
*网格控件可以直接处理每行和每列中的值。
*数据可以通过使用一个网格表(gridtable)来间接地处理。
较简单的一种是使用网格控件直接处理值。
在这种情况下,网格维护着数据的一份拷贝。
在这种情况下,如果有大量的数据或你的应用程序已经有了一个现存的网格类的数据结构,那么这可能显得比较笨拙。
如果是这样,你可以使用一个网格表来处理该网格的数据。
参见第5章来回顾一下在mVc架构中,网格表是如何被作为一个模型的。
如何创建一个简单的网格?
尽管网格控件有大量的方法用于控件精确的显示和数据的管理,但时开始使用一个网格控件是十分简单的。
图14.1显示了一个简单的网格,其中的单元格中添加了一些字符串数据。
图14.1
网格控件是类wx.grid.grid的实例。
由于网格类及相关类的尺寸的原因,实际中许多的程序都不使用它,wxpython的网格类存在于它们自己的模块中,它们不会被自动导入到核心的名字空间中。
wx.grid.grid的构造函数类似于其它的控件的构造函数。
size=wx.defaultsize,style=wx.wants_chaRs,name=wxpanelnamestr)
其中的所有的参数与wx.window的构造函数是相同的,并且有相同的意义。
wx.wants_chaRs样式是网格的默认样式,除此之外,wx.grid.grid没有为自己定义特别的样式。
由于网格类的复杂性,所以在程序中,你一般要自定义网格类的一个子类来实现一个网格,而非直接使用wx.grid.grid的一个实例。
和我们所见过的别的控件不同,调用该构造函数不足以创建一个可用的网格。
有两个方法用以初始化网格
*creategrid()*settable()
在这一节,我们将讨论一个方法,第二个方法将在网格表的讨论中提及。
要显式地初始化网格,可以使用方法
creategrid(numRows,numcols,selmode=wx.grid.grid.selectcells)。
这个方法应该在构造函数之后被直接地调用,并用必须在网格被显示之前调用。
参数
numRows,numcols指定了网格的初始大小。
参数selmode指定了网格中单元格的选择模式,默认值是wx.grid.grid.selectcells,意思是一次只选择一个单元格。
其它的值有wx.grid.grid.selectRows,意思是一次选择整个行,
wx.grid.grid.selectioncolumns,意思是一次选择整个列。
创建之后,你可以使用方
法getselectionmode()来访问选择模式,并且你可以使用方法
setselectionmode(mode)来重置模式。
你还可以使用方法getnumbercols()和getnumberRows()来得到行和列数。
在内部,使用creategrid()初始化网格之后,wxpython设置了一个二维的字符串数组。
一旦网格被初始化了,你就可以使用方法setcellValue(row,col,s)来放置数据。
其中参数row,col是要设置的单元格的坐标,s是要在该坐标处显示的字符串文本。
如果你想获取特定坐标处的值,你可以使用函数getcellValue(row,col),该函数返回字符串。
要一次清空整个网格,你可以使用方法cleargrid()。
例14.1显示了产生图14.1的代码。
例14.1使用cleargrid()创建的一个示例网格
importwx.gridclasstestFrame(wx.Frame):
def__init__(self):
wx.Frame.__init__(self,none,title="
simplegrid"
size=(640,480))grid=wx.grid.grid(self)grid.creategrid(50,50)forrowinrange(20):
forcolinrange(6):
grid.setcellValue(row,col,"
cell(%d,%d)"
%(row,col))app=wx.pysimpleapp()frame=testFrame()frame.show()app.mainloop()
creategrid()和setcellValue()仅限于你的网格数据是由简单字符串组成的情况。
如果你的数据更加的复杂或表特别大的话,更好的方法是创建一个网格表,这将随后讨论。
如何使用网格表来创建一个网格?
对于较复杂的情况,你可以将你的数据保存在一个网格表中,网格表是一个单独的类,它存储数据并与网格控件交互以显示数据。
推荐在下列情况下使用网格表:
*网格的数据比较复杂*数据存储在你的系统中的另外的对象中*网格太大以致于不能一次整个被存储到内存中
在第5章中,我们在mVc设计模式中讨论了网格表以及在你的应用程序中实现一个网格表的不同方法。
在本章,我们将重点放在对网格表的使用上。
图14.2显示了使用网格表创建的一个网格。
图14.2
要使用一个网格表,你需要要创建wx.grid.pygridtablebase的子类。
该子类必须覆盖父类wx.grid.gridtablebase的一些方法。
例14.2显示了用于创建图14.2的代码。
例14.2关于使用网格表机制的代码
importwximportwx.gridclasstesttable(wx.grid.p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python html 表格