python写html
⑴ 1、使用python读取依据生成的xml文件,添加样式表,最中生成一个html文件
#coding=utf8
#引入要用到的xml解析库这里我们用比较轻量级的minidom就行了
importxml.dom.minidom
#定义一个html输出模板
#后面我们只是要把这段html中的学生数据部分(<student_trs/>)换成xml中读到的数据
template="""
<html>
<tableborder="1"style="width:100%;text-align:center;">
<tr>
<tdcolspan="4">学生信息</td>
</tr>
<student_trs/>
</table>
</html>
"""
#读取xml文档内容,这里假设是a.xml
dom=xml.dom.minidom.parse('a.xml')
#获取xml中的所有student节点
student_nodes=dom.getElementsByTagName('student')
#初始化student_trs为空
student_trs=""
#遍历每一条学生信息
fornodeinstudent_nodes:
#getAttribute用户获取节点的属性,得到id属性值即学号
#因为xml解析后是Unicode编码的,所以这里要转成utf8编码,下面同理
sid=node.getAttribute("id").encode('utf-8')
#获取所有子节点
children=node.childNodes
forchildinchildren:
#判断子节点的名字为姓名、性别、专业的话,就采集其对应文本
ifchild.nodeName.encode('utf-8')=="姓名":
#使用。childNodes[0].nodeValue的方法得到节点的文本
name=child.childNodes[0].nodeValue.encode('utf-8')
ifchild.nodeName.encode('utf-8')=="性别":
sex=child.childNodes[0].nodeValue.encode('utf-8')
ifchild.nodeName.encode('utf-8')=="专业":
specialty=child.childNodes[0].nodeValue.encode('utf-8')
#组成html中的一行学生数据
student_tr="<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>"%(sid,name,sex,specialty)
#将这一行数据添加到总数据中
student_trs+=student_tr
#替换模板的<student_trs/>为我们上面所得到的html数据
html=template.replace("<student_trs/>",student_trs)
#输入html结果到output.html
open("output.html","w").write(html)
#PS:你提供的xml数据有问题,确实了一个</students>标记
#正确的xml应该如下
"""
<?xmlversion="1.0"encoding="UTF-8"?>
<person>
<students>
<studentid="20140711">
<姓名>三</姓名>
<性别>男</性别>
<专业>计算机</专业>
</student>
</students>
</person>
"""
⑵ 想用python编写一个脚本,登录网页,在网页里做一系列操作,应该怎样实现
python编写一个脚本的腊厅具体操作:
1、首先,打开python并创建一个新的PY文件。
⑶ python怎样做html的表格
现要实现python制作html格式的表格,利用Python对字符串str.format()格式化操作进行处理,在日常对CVS格式文件处理过程当中,经常会将CVS格式文件进行转换,在正式场合是程序读取CVS文件进行转换并输出到html格式的文件当中,但现在只是实现一下转换的过程,需要输入以逗号分隔的数据。
在设计程式的时候,需要先定义一下整个代码的框架,首先我们要定义一个主函数main(),虽然Python没有规定入口函数,一般在正式的开发中都设计了一个main()函数作为程序的入口函数,或许这是一种规范吧。然后我们在定义一个打印表头的方法print_head(),并在主函数里进行调用。再定义一个打印表尾的方法print_end(),也在主函数中进行调用。定义print_line()为打印表格行,定义extract_field()处理cvs行数据转换为list集合数据。最后再定义一个处理特殊符号的方法escape_html(),因为在html代码中为了避免与它的标签冲突,特要进行特殊符号的转换,如&-->&
还有就是对长度过长的数据要进行处理并用...代替
源代码:
#Author Tandaly
#Date 2013-04-09
#File Csv2html.py
#主函数
def main():
print_head()
maxWidth = 100
count = 0
while True:
try:
line = str(input())
if count == 0:
color = "lightgreen"
elif count%2 == 0:
color = "white"
else:
color = "lightyellow"
print_line(line, color, maxWidth)
count += 1
except EOFError:
break
print_end()
#打印表格头
def print_head():
print("")
#打印表行
def print_line(line, color, maxWidth):
tr = "".format(color)
tds = ""
if line is not None and len(line) > 0:
fields = axtract_fields(line)
for filed in fields:
td = "{0}".format(filed if (len(str(filed)) <= maxWidth) else
(str(filed)[:100] + "..."))
tds += td
tr += "{0}
".format(tds)
print(tr)
#打印表格尾
def print_end():
print("")
#抽取行值
def axtract_fields(line):
line = escape_html(line)
fields = []
field = ""
quote = None
for c in line:
if c in "\"":
if quote is None:
quote = c
elif quote == c:
quote = None
continue
if quote is not None:
field += c
continue
if c in ",":
fields.append(field)
field = ""
else:
field += c
if len(field) > 0:
fields.append(field)
return fields
#处理特殊符号
def escape_html(text):
text = text.replace("&", "&")
text = text.replace(">", ">")
text = text.replace("<", "<")
return text
#程序入口
if __name__ == "__main__":
main()
运行结果:
>>>
"nihao","wo"
nihaowo
"sss","tandaly"
...tandaly
"lkkkkkkkkkkksdfssssssssssssss",
34
...34
⑷ 在Python中使用HTML模版的教程
这篇文章主要介绍了在Python中使用HTML模版的教程,HTML模版也是Python的各大框架下的一个基本功能,需要的朋友可以参考下。Web框架把我们从WSGI中拯救出来了。现在,我们只需要不断地编写函数,带上URL,就可以继续Web App的开发了。
但是,Web App不仅仅是处理逻辑,展示给用户的页面也非常重要。在函数中返回一个包含HTML的字符串,简单的页面还可以,但是,想想新浪首页的6000多行的HTML,你确信能在Python的字符串中正确地写出来么?反正我是做不到。
俗话说得好,不懂前端的Python工程师不是好的产品经理。有Web开发经验的同学都明白,Web App最复杂的部分就在HTML页面。HTML不仅要正确,还要通过CSS美化,再加上复杂的JavaScript脚本来实现各种交互和动画效果。总之,生成HTML页面的难度很大。
由于在Python代码里拼字符串是不现实的,所以,模板技术出现了。
使用模板,我们需要预先准备一个HTML文档,这个HTML文档不是普通芹腔的HTML,而是嵌入了一些变量和指令,然后,根据我们传入的数据,替换后嫌嫌衫,得到最终的HTML,发送给用户:
这就是传说中的MVC:Model-View-Controller,中文名“模型-视图-控制器”。
Python处理URL的函数就是C:Controller,Controller负责业务逻辑,比如检查用户名是否存在,取出用户信息等等;
包含变量{{ name }}的模板就是V:View,View负责显示逻者枝辑,通过简单地替换一些变量,View最终输出的就是用户看到的HTML。
MVC中的Model在哪?Model是用来传给View的,这样View在替换变量的时候,就可以从Model中取出相应的数据。
上面的例子中,Model就是一个dict:
{ name: Michael }
只是因为Python支持关键字参数,很多Web框架允许传入关键字参数,然后,在框架内部组装出一个dict作为Model。
现在,我们把上次直接输出字符串作为HTML的例子用高端大气上档次的MVC模式改写一下:
16
17
18
19
20
21
22
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route(/, methods=[GET, POST])
def home():
return render_template(home.html)
@app.route(/signin, methods=[GET])
def signin_form():
return render_template(form.html)
@app.route(/signin, methods=[POST])
def signin():
username = request.form[username]
password = request.form[password]
if username==admin and password==password:
return render_template(signin-ok.html, username=username)
return render_template(form.html, message=Bad username or password, username=username)
if __name__ == __main__:
app.run()
Flask通过render_template()函数来实现模板的渲染。和Web框架类似,Python的模板也有很多种。Flask默认支持的模板是jinja2,所以我们先直接安装jinja2:
?
1
$ easy_install jinja2
然后,开始编写jinja2模板:
?
1
home.html
用来显示首页的模板:
11
html
head
titleHome/title
/head
body
h1 style=font-style:italicHome/h1
/body
/html
form.html
用来显示登录表单的模板:
16
17
18
html
head
titlePlease Sign In/title
/head
body
{% if message %}
p style=color:red{{ message }}/p
{% endif %}
form action=/signin method=post
legendPlease sign in:/legend
pinput name=username placeholder=Username value={{ username }}/p
pinput name=password placeholder=Password type=password/p
pbutton type=submitSign In/button/p
/form
/body
/html
signin-ok.html
登录成功的模板:
?
7
8
html
head
titleWelcome, {{ username }}/title
/head
body
pWelcome, {{ username }}!/p
/body
/html
登录失败的模板呢?我们在form.html中加了一点条件判断,把form.html重用为登录失败的模板。
最后,一定要把模板放到正确的templates目录下,templates和app.py在同级目录下:
启动python app.py,看看使用模板的页面效果:
通过MVC,我们在Python代码中处理M:Model和C:Controller,而V:View是通过模板处理的,这样,我们就成功地把Python代码和HTML代码最大限度地分离了。
使用模板的另一大好处是,模板改起来很方便,而且,改完保存后,刷新浏览器就能看到最新的效果,这对于调试HTML、CSS和JavaScript的前端工程师来说实在是太重要了。
在Jinja2模板中,我们用{{ name }}表示一个需要替换的变量。很多时候,还需要循环、条件判断等指令语句,在Jinja2中,用{% ... %}表示指令。
比如循环输出页码:
?
1
2
3
{% for i in page_list %}
a href=/page/{{ i }}{{ i }}/a
{% endfor %}
如果page_list是一个list:[1, 2, 3, 4, 5],上面的模板将输出5个超链接。
除了Jinja2,常见的模板还有:
Mako:用和${xxx}的一个模板;
Cheetah:也是用和${xxx}的一个模板;
Django:Django是一站式框架,内置一个用{% ... %}和{{ xxx }}的模板。
小结
有了MVC,我们就分离了Python代码和HTML代码。HTML代码全部放到模板里,写起来更有效率。
⑸ 用python生成在html中显示的表格
可以通过写python脚本制作HTML的form,包括HTML的标签什么的
python 有个第三方库pyh用来生成HTML,可以试用一下:
from pyh import *
page = PyH('This is PyH page')
page << h1(cl='center', 'My big title')
table1 = page << table(border='1',id='mytable1')
headtr = table1 << tr(id='headline')
headtr << td('Head1') << td('Head2')
tr1 = table1 << tr(id='line1')
tr1 << td('r1,c1') <<td('r1,c2')
tr2 = table1 << tr(id='line2')
tr2 << td('r2,c1') <<td('r2,c2')
page.printOut()
⑹ Python实现简单HTML表格解析
本文实例讲述了Python实现简单HTML表格解析的方法。分享给大家供段余档大家参考。握乱具体分析如下:
这里依赖libxml2dom,确保首先安装!导入到你的脚毁谨步并调用parse_tables() 函数。
1. source = a string containing the source code you can pass in just the table or the entire page code
2. headers = a list of ints OR a list of strings
If the headers are ints this is for tables with no header, just list the 0 based index of the rows in which you want to extract data.
If the headers are strings this is for tables with header columns (with the tags) it will pull the information from the specified columns
3. The 0 based index of the table in the source code. If there are multiple tables and the table you want to parse is the third table in the code then pass in the number 2 here
It will return a list of lists. each inner list will contain the parsed information.
具体代码如下:
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118#The goal of table parser is to get specific information from specific
#columns in a table.
#Input: source code from a typical website
#Arguments: a list of headers the user wants to return
#Output: A list of lists of the data in each row
import libxml2dom
def parse_tables(source, headers, table_index):
parse_tables(string source, list headers, table_index)
headers may be a list of strings if the table has headers defined or
headers may be a list of ints if no headers defined this will get data
from the rows index.
This method returns a list of lists
#Determine if the headers list is strings or ints and make sure they
#are all the same type
j = 0
print Printing headers: ,headers
#route to the correct function
#if the header type is int
if type(headers[0]) == type(1):
#run no_header function
return no_header(source, headers, table_index)
#if the header type is string
elif type(headers[0]) == type(a):
#run the header_given function
return header_given(source, headers, table_index)
else:
#return none if the headers arent correct
return None
#This function takes in the source code of the whole page a string list of
#headers and the index number of the table on the page. It returns a list of
#lists with the scraped information
def header_given(source, headers, table_index):
#initiate a list to hole the return list
return_list = []
#initiate a list to hold the index numbers of the data in the rows
header_index = []
#get a document object out of the source code
doc = libxml2dom.parseString(source,html=1)
#get the tables from the document
tables = doc.getElementsByTagName(table)
try:
#try to get focue on the desired table
main_table = tables[table_index]
except:
#if the table doesnt exits then return an error
return [The table index was not found]
#get a list of headers in the table
table_headers = main_table.getElementsByTagName(th)
#need a sentry value for the header loop
loop_sentry = 0
#loop through each header looking for matches
for header in table_headers:
#if the header is in the desired headers list
if header.textContent in headers:
#add it to the header_index
header_index.append(loop_sentry)
#add one to the loop_sentry
loop_sentry+=1
#get the rows from the table
rows = main_table.getElementsByTagName(tr)
#sentry value detecting if the first row is being viewed
row_sentry = 0
#loop through the rows in the table, skipping the first row
for row in rows:
#if row_sentry is 0 this is our first row
if row_sentry == 0:
#make the row_sentry not 0
row_sentry = 1337
continue
#get all cells from the current row
cells = row.getElementsByTagName(td)
#initiate a list to append into the return_list
cell_list = []
#iterate through all of the header indexs
for i in header_index:
#append the cells text content to the cell_list
cell_list.append(cells[i].textContent)
#append the cell_list to the return_list
return_list.append(cell_list)
#return the return_list
return return_list
#This function takes in the source code of the whole page an int list of
#headers indicating the index number of the needed item and the index number
#of the table on the page. It returns a list of lists with the scraped info
def no_header(source, headers, table_index):
#initiate a list to hold the return list
return_list = []
#get a document object out of the source code
doc = libxml2dom.parseString(source, html=1)
#get the tables from document
tables = doc.getElementsByTagName(table)
try:
#Try to get focus on the desired table
main_table = tables[table_index]
except:
#if the table doesnt exits then return an error
return [The table index was not found]
#get all of the rows out of the main_table
rows = main_table.getElementsByTagName(tr)
#loop through each row
for row in rows:
#get all cells from the current row
cells = row.getElementsByTagName(td)
#initiate a list to append into the return_list
cell_list = []
#loop through the list of desired headers
for i in headers:
try:
#try to add text from the cell into the cell_list
cell_list.append(cells[i].textContent)
except:
#if there is an error usually an index error just continue
continue
#append the data scraped into the return_list
return_list.append(cell_list)
#return the return list
return return_list
希望本文所述对大家的Python程序设计有所帮助。
⑺ Python写静态HTML
因为近期工作需要,常常要将测试结果/数据统计、汇总和展示,因此会有写静态HTML的需求,本文记录下python写静态HTML的小技巧
灵感时来源于unittest测试框架最常用的报告插件: HTMLTestRunner ,该插件本身基于python2且已经更新了,好在 @虫师 一直在维护和更新这个插件,使得它能继续被大家所使用,了解详情请移步: SeldomQA/HTMLTestRunner
回到HTMLTestRunner报告插件,阅读源码发现,作者只用了一个python文件便巧妙的将写HTML、页面绘制和数据嵌入搞定了。进一步分析可以看到,作者先是在Template基类中定义了测试报告的HTML结构模板和各个模块/表格模板,然后再以格式化输入的形式给每一个模板中填充目标数据,再将填充好的模板以格式化输入的形式填充到HTML结构模板中,最后再将所有内容写成一个HTML文件即可。
可以看到,这样的设计其实优点在于非常小巧和轻量,缺点在于可维护和可移植性差,数据量小还尚可,不太适合大量数据的统计和绘制。
这种设计的关键在于建模板,然后 按需 填充数据,最后再写HTML,通常我的做法是: