导航:首页 > 编程语言 > pythonhandledata

pythonhandledata

发布时间:2022-10-04 08:09:55

python html 模块简介

比如:

比如,数学符号 , ,可以直接获得:

escape 将特殊字符 & , < 和 > 替换为HTML安全序列。如果可选的 flags quote 为 True (默认值),则还会翻译引号字符,包括双引号( " )和单引号( ' )字符。

将字符串 s 中的所有命名和数字字符引用 (例如 > , > , > ) 转换为相应的 Unicode 字符。此函数使用 HTML 5 标准为有效和无效字符引用定义的规则,以及 HTML 5 命名字符引用列表 。

这个模块定义了一个 HTMLParser 类,为 HTML(超文本标记语言)和 XHTML 文本文件解析提供基础。

class html.parser.HTMLParser(*, convert_charrefs=True) 创建一个能解析无效标记的解析器实例。查找标签(tags)和其他标记(markup)并调用 handler 函数。

用法:

通过调用 self.handle_starttag 处理开始标签,或通过调用 self.handle_startendtag 处理结束标签。标签之间的数据通过以 data 为参数调用 self.handle_data 从解析器传递到派生类(数据可以分成任意块)。如果 convert_charrefs 为 True ,则将字符引用自动转换为相应的 Unicode 字符(并且 self.handle_data 不再拆分成块),否则通过调用带有字符串的 self.handle_entityref 或 self.handle_charref 来传递它们以分别包含命名或数字引用作为参数。如果 convert_charrefs 为 True (默认值),则所有字符引用( script / style 元素中的除外)都会自动转换为相应的 Unicode 字符。

一个 HTMLParser 类的实例用来接受 HTML 数据,并在标记开始、标记结束、文本、注释和其他元素标记出现的时候调用对应的方法。要实现具体的行为,请使用 HTMLParser 的子类并重载其方法。

这个解析器不检查结束标记是否与开始标记匹配,也不会因外层元素完毕而隐式关闭了的元素引发结束标记处理。

下面是简单的 HTML 解析器的一个基本示例,使用 HTMLParser 类,当遇到开始标记、结束标记以及数据的时候将内容打印出来。

输出:

HTMLParser.reset() 重置实例。丢失所有未处理的数据。在实例化阶段被隐式调用。

HTMLParser.feed(data) 填充一些文本到解析器中。如果包含完整的元素,则被处理;如果数据不完整,将被缓冲直到更多的数据被填充,或者 close() 被调用。 data 必须为 str 类型。

HTMLParser.close() 如同后面跟着一个文件结束标记一样,强制处理所有缓冲数据。这个方法能被派生类重新定义,用于在输入的末尾定义附加处理,但是重定义的版本应当始终调用基类 HTMLParser 的 close() 方法。

HTMLParser.getpos() 返回当前行号和偏移值。

HTMLParser.get_starttag_text() 返回最近打开的开始标记中的文本。结构化处理时通常应该不需要这个,但在处理“已部署”的 HTML 或是在以最小改变来重新生成输入时可能会有用处(例如可以保留属性间的空格等)。

下列方法将在遇到数据或者标记元素的时候被调用。他们需要在子类中重载。基类的实现中没有任何实际操作(除了 handle_startendtag() ):

HTMLParser.handle_starttag 这个方法在标签开始的时候被调用(例如: <div id="main"> )。 tag 参数是小写的标签名。 attrs 参数是一个 (name, value) 形式的列表,包含了所有在标记的 <> 括号中找到的属性。 name 转换为小写, value 的引号被去除,字符和实体引用都会被替换。比如,对于标签 <a href="https://www.cwi.nl/"> ,这个方法将以下列形式被调用 handle_starttag('a', [('href', 'https://www.cwi.nl/')]) 。 html.entities 中的所有实体引用,会被替换为属性值。

HTMLParser.handle_endtag(tag) 此方法被用来处理元素的结束标记(例如: </div> )。 tag 参数是小写的标签名。

HTMLParser.handle_startendtag(tag, attrs) 类似于 handle_starttag() , 只是在解析器遇到 XHTML 样式的空标记时被调用( <tag ... /> )。这个方法能被需要这种特殊词法信息的子类重载;默认实现仅简单调用 handle_starttag() 和 handle_endtag() 。

HTMLParser.handle_data(data) 这个方法被用来处理任意数据(例如:文本节点和 <script>...</script> 以及 <style>...</style> 中的内容)。

HTMLParser.handle_entityref(name) 这个方法被用于处理 &name; 形式的命名字符引用(例如 > ),其中 name 是通用的实体引用(例如: 'gt' )。如果 convert_charrefs 为 True,该方法永远不会被调用。

HTMLParser.handle_charref(name) 这个方法被用来处理 &#NNN; 和 &#xNNN; 形式的十进制和十六进制字符引用。例如, > 等效的十进制形式为 > ,而十六进制形式为 > ;在这种情况下,方法将收到 '62' 或 'x3E' 。如果 convert_charrefs 为 True ,则该方法永远不会被调用。

HTMLParser.handle_comment(data) 这个方法在遇到注释的时候被调用(例如: )。例如, 这个注释会用 ' comment ' 作为参数调用此方法。

Internet Explorer 条件注释(condcoms)的内容也被发送到这个方法,因此,对于 ``,这个方法将接收到 '[if IE 9]>IE9-specific content<![endif]' 。

HTMLParser.handle_decl(decl) 这个方法用来处理 HTML doctype 申明(例如 <!DOCTYPE html> )。 decl 形参为 <!...> 标记中的所有内容(例如: 'DOCTYPE html' )。

HTMLParser.handle_pi(data) 此方法在遇到处理指令的时候被调用。 data 形参将包含整个处理指令。例如,对于处理指令 <?proc color='red'> ,这个方法将以 handle_pi("proc color='red'") 形式被调用。它旨在被派生类重载;基类实现中无任何实际操作。

注解: HTMLParser 类使用 SGML 语法规则处理指令。使用 '?' 结尾的 XHTML 处理指令将导致 '?' 包含在 data 中。

HTMLParser.unknown_decl(data) 当解析器读到无法识别的声明时,此方法被调用。 data 形参为 <![...]> 标记中的所有内容。某些时候对派生类的重载很有用。基类实现中无任何实际操作。

因此,我们可以如此定义:

下面介绍如何解析 HTML 文档。

解析一个文档类型声明:

解析一个具有一些属性和标题的元素:

script 和 style 元素中的内容原样返回,无需进一步解析:

解析注释:

解析命名或数字形式的字符引用,并把他们转换到正确的字符(注意:这 3 种转义都是 '>' ):

填充不完整的块给 feed() 执行, handle_data() 可能会多次调用(除非 convert_charrefs 被设置为 True ):

解析无效的 HTML (例如:未引用的属性)也能正常运行:

㈡ python 去除html标签的几种方法

python去除html标签的几种方法,代码如下:

#!/usr/bin/python
#-*-coding:utf-8-*-
'''
Createdon2015-07-08
@author:Administrator
'''
importre

classFilterTag():
def__init__(self):
pass
deffilterHtmlTag(self,htmlStr):
'''
过滤html中的标签
:paramhtmlStr:html字符串或是网页源码
'''
self.htmlStr=htmlStr
#先过滤CDATA
re_cdata=re.compile('//]*//]]>',re.I)#匹配CDATA
re_script=re.compile('<s*script[^>]*>[^<]*<s*/s*scripts*>',re.I)#Script
re_style=re.compile('<s*style[^>]*>[^<]*<s*/s*styles*>',re.I)#style
re_br=re.compile('')#处理换行
re_h=re.compile(']*>')#HTML标签
re_comment=re.compile('')#HTML注释
s=re_cdata.sub('',htmlStr)#去掉CDATA
s=re_script.sub('',s)#去掉SCRIPT
s=re_style.sub('',s)#去掉style
s=re_br.sub(' ',s)#将br转换为换行
blank_line=re.compile(' +')#去掉多余的空行
s=blank_line.sub(' ',s)
s=re_h.sub('',s)#去掉HTML标签
s=re_comment.sub('',s)#去掉HTML注释
#去掉多余的空行
blank_line=re.compile(' +')
s=blank_line.sub(' ',s)
filterTag=FilterTag()
s=filterTag.replaceCharEntity(s)#替换实体
prints

defreplaceCharEntity(self,htmlStr):
'''
替换html中常用的字符实体
使用正常的字符替换html中特殊的字符实体
可以添加新的字符实体到CHAR_ENTITIES中
CHAR_ENTITIES是一个字典前面是特殊字符实体后面是其对应的正常字符
:paramhtmlStr:
'''
self.htmlStr=htmlStr
CHAR_ENTITIES={'nbsp':'','160':'',
'lt':'<','60':'<',
'gt':'>','62':'>',
'amp':'&','38':'&',
'quot':'"','34':'"',}
re_charEntity=re.compile(r'&#?(?Pw+);')
sz=re_charEntity.search(htmlStr)
whilesz:
entity=sz.group()#entity全称,如>
key=sz.group('name')#去除&;后的字符如(""--->key="nbsp")去除&;后entity,如>为gt
try:
htmlStr=re_charEntity.sub(CHAR_ENTITIES[key],htmlStr,1)
sz=re_charEntity.search(htmlStr)
exceptKeyError:
#以空串代替
htmlStr=re_charEntity.sub('',htmlStr,1)
sz=re_charEntity.search(htmlStr)
returnhtmlStr

defreplace(self,s,re_exp,repl_string):
returnre_exp.sub(repl_string)


defstrip_tags(self,htmlStr):
'''
使用HTMLParser进行html标签过滤
:paramhtmlStr:
'''
self.htmlStr=htmlStr
htmlStr=htmlStr.strip()
htmlStr=htmlStr.strip(" ")
result=[]
parser=HTMLParser()
parser.handle_data=result.append
parser.feed(htmlStr)
parser.close()
return''.join(result)

defstripTagSimple(self,htmlStr):
'''
最简单的过滤html<>标签的方法注意必须是<任意字符>而不能单纯是<>
:paramhtmlStr:
'''
self.htmlStr=htmlStr
#dr=re.compile(r'<[^>]+>',re.S)
dr=re.compile(r']*>',re.S)
htmlStr=re.sub(dr,'',htmlStr)
returnhtmlStr

if__name__=='__main__':
#s=file('Google.html').read()
filters=FilterTag()
printfilters.stripTagSimple("<1>你好")

㈢ python文件读写问题

defhandle_data(self,data):
f=open('filename.txt','w')
ifself.p_text:
a=data
f.write(a)
f.close()

这一部分代码有问题,如果是W每次都会重写这个文件改成A就可以了

f = open('filename.txt','a')

㈣ python 解析html 什么包好

对html的解析是网页抓取的基础,分析抓取的结果找到自己想要的内容或标签以达到抓取的目的。
HTMLParser是python用来解析html的模块。它可以分析出html里面的标签、数据等等,是一种处理html的简便途径。 HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理。它主要的用户回调函数的命名都是以handler_开头的,都是HTMLParser的成员函数。当我们使用时,就从HTMLParser派生出新的类,然后重新定义这几个以handler_开头的函数即可。这几个函数包括:
handle_startendtag 处理开始标签和结束标签
handle_starttag 处理开始标签,比如<xx> tag不区分大小写

handle_endtag 处理结束标签,比如</xx>
handle_charref 处理特殊字符串,就是以&#开头的,一般是内码表示的字符
handle_entityref 处理一些特殊字符,以&开头的,比如
handle_data 处理数据,就是<xx>data</xx>中间的那些数据
handle_comment 处理注释
handle_decl 处理<!开头的,比如<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
handle_pi 处理形如<?instruction>的东西
def handle_starttag(self,tag,attr):
#注意:tag不区分大小写,此时也可以解析 <A 标签
# SGMLParser 会在创建attrs 时将属性名转化为小写。

if tag=='a':
for href,link in attr:
if href.lower()=="href":
pass

1. 基本解析,找到开始和结束标签

[python] view plain
<span style="font-size:18px;">#coding:utf-8

from HTMLParser import HTMLParser
'''''
HTMLParser的成员函数:

handle_startendtag 处理开始标签和结束标签
handle_starttag 处理开始标签,比如<xx>
handle_endtag 处理结束标签,比如</xx>
handle_charref 处理特殊字符串,就是以&#开头的,一般是内码表示的字符
handle_entityref 处理一些特殊字符,以&开头的,比如
handle_data 处理数据,就是<xx>data</xx>中间的那些数据
handle_comment 处理注释
handle_decl 处理<!开头的,比如<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
handle_pi 处理形如<?instruction>的东西

'''
class myHtmlParser(HTMLParser):
#处理<!开头的内容
def handle_decl(self,decl):
print 'Encounter some declaration:'+ decl
def handle_starttag(self,tag,attrs):
print 'Encounter the beginning of a %s tag' % tag
def handle_endtag(self,tag):
print 'Encounter the end of a %s tag' % tag
#处理注释
def handle_comment(self,comment):
print 'Encounter some comments:' + comment

if __name__=='__main__':
a = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\
<html><head><!--insert javaScript here!--><title>test</title><body><a href="http: //www.163.com">链接到163</a></body></html>'
m=myHtmlParser()
m.feed(a)
m.close()

输出结果:

Encounter some declaration:DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
Encounter the beginning of a html tag
Encounter the beginning of a head tag
Encounter some comments:insert javaScript here!
Encounter the beginning of a title tag
Encounter the end of a title tag
Encounter the beginning of a body tag
Encounter the beginning of a a tag
Encounter the end of a a tag
Encounter the end of a body tag
Encounter the end of a html tag</span>

㈤ Python爬虫怎么爬取左右没有标签的内容

handle_starttag每遇见一个以"<"开始的tag回调一次,handle_endtag每遇见一个"</"标识的结束时回调一次,你的text3和text5位于结束标记之后,因此要自己手动用flag标记下,然后在handle_data里处理对应的数据!

㈥ python怎么解析html文档

Python提供了一个HTMLParser模块,可以非常简单的解析HTML

首先考虑如何从如下的HTML中提取信息

<!--basic.html>
<HTML>

<HEAD>
<TITLE>DocTitle&ampIntro</TITLE>
</HEAD>

<BODY>
Thisismytext.
</BODY>

</HTML>
首先定义一个TitleParser类,是标准HTMLParser类的子孙
HTMLParser的feed()方法会调用handle_starttag(),handle_data(),handle_endtag()方法

#!/usr/bin/envpython
#coding=utf-8importsys

classTitleParser(HTMLParser):
def__init__(self):
self.title=''
self.readingtitle=0
HTMLParser.__init__(self)

defhandle_starttag(self,tag,attrs):
iftag=='title':
self.readingtitle=1

defhandle_data(self,data):
ifself.readingtitle:
self.title+=data

defhandle_endtag(self,tag):
iftag=='title':
self.readingtitle=0

defhandle_entityref(self,name):
ifentitydefs.has_key(name):
self.handle_data(entitydefs[name])
else:
self.handle_data('&'+name+';')

defgettitle(self):
returnself.title

fd=open(sys.argv[1])
tp=TitleParser()
tp.feed(fd.read())
print"Titleis:",tp.gettitle()

㈦ 如何用python操作excel

指定选取三列然后挑选出同时满足>=1或者同时<=-1的 将其所有数据存入新的csv表格中
程序如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2014-04-10 21:47:56
# @Function: 指定选取三列然后挑选出同时满足>=1或者同时<=-1的 将其所有数据存入新的csv表格中
# @Author : BeginMan

import os
import string
import xlrd
import xlwt

def get_data():
"""获取excel数据源"""
file = r'C:\Users\Administrator\Desktop\pytool\xlrd\initial_log_data.xls' # 改成自己的路径
filepath = raw_input(u'请将xls文件路径粘贴进去,如果程序里已经指定了文件则按Enter键继续:')
is_valid = False # 验证文件
try:
filepath = [file, filepath][filepath != '']
print filepath
# 判断给出的路径是不是xls格式
if os.path.isfile(filepath):
filename = os.path.basename(filepath)
if filename.split('.')[1] == 'xls':
is_valid = True
data = None
if is_valid:
data = xlrd.open_workbook(filepath)
except Exception, e:
print u'你操作错误:%s' %e
return None
return data

def handle_data():
"""处理数据"""
data = get_data()
if data:
col_format = ['B', 'C', 'D'] # 指定的列
inp = raw_input(u'请选择指定的三列,用逗号分隔,默认的是B,C,D(英文逗号,不区分大小写),如果选择默认则按Enter键继续:\n')
try:
inp = inp.split(',')
col_format = [col_format,inp][len([i for i in inp if i in string.letters]) == 3]
col_format = [i.upper() for i in col_format] # 转换成大写
table = data.sheet_by_index(0) # 选取第一个工作区
nrows = table.nrows # 行数
ncols = table.ncols # 列数
str_upcase = [i for i in string.uppercase] # 所有大写字母
i_upcase = range(len(str_upcase)) # 对应的数字
ncols_dir = dict(zip(str_upcase,i_upcase)) # 格式成字典
col_index = [ncols_dir.get(i) for i in col_format] # 获取指定列所对应的索引

# 选取的三列是否同时满足 >=1或者同时<=-1
print u'正在检索中……'
count = 0
result = []
for i in xrange(nrows):
cell_0 = table.cell(i,col_index[0]).value
cell_1 = table.cell(i,col_index[1]).value
cell_2 = table.cell(i,col_index[2]).value
if (cell_0>=1 and cell_1>=1 and cell_2>=1) or (cell_0<=-1 and cell_1<=-1 and cell_2<=-1):
result.append(table.row_values(i)) # 将符合要求的一行添加进去
count += 1
print u'该文件中共%s行,%s列,其中满足条件的共有%s条数据' %(nrows, ncols, count)
print u'正在写入数据……'
col_name = col_format[0]+col_format[1]+col_format[2]
if write_data(result, col_name):
print u'写入成功!'
except Exception, e:
print u'你操作错误:%s' %e
return None
else:
print u'操作失败'
return None

def write_data(data, name):
"""写入数据,data为符合条件的数据列表,name表示指定的哪三个列,以此命名"""
file = xlwt.Workbook()
table = file.add_sheet(name,cell_overwrite_ok=True)
l = 0 # 表示行
for line in data:
c = 0 # 表示一行下的列数
for col in line:
table.write(l,c,line[c])
c += 1
l += 1
defatul_f = r'C:\Users\Administrator\Desktop\pytool\xlrd' # 默认路径
f = raw_input(u'请选择保存文件的路径:按回车跳过:')
f_name = r'\%s.xls' % name
filepath = [defatul_f+f_name, f+f_name][f != '']
file.save(filepath)
return True

def main():
handle_data()

if __name__ == '__main__':
main()

㈧ 怎么学习python量化交易

下面教你八步写个量化交易策略——单股票均线策略

1 确定策略内容与框架

若昨日收盘价高出过去20日平均价今天开盘买入股票
若昨日收盘价低于过去20日平均价今天开盘卖出股票

只操作一只股票,很简单对吧,但怎么用代码说给计算机听呢?

想想人是怎么操作的,应该包括这样两个部分

既然是单股票策略,事先决定好交易哪一个股票。

每天看看昨日收盘价是否高出过去20日平均价,是的话开盘就买入,不是开盘就卖出。每天都这么做,循环下去。

对应代码也是这两个部分

definitialize(context):
用来写最开始要做什么的地方
defhandle_data(context,data):
用来写每天循环要做什么的地方

2 初始化

我们要写设置要交易的股票的代码,比如 兔宝宝(002043)

definitialize(context):
g.security='002043.XSHE'#存入兔宝宝的股票代码

3 获取收盘价与均价

首先,获取昨日股票的收盘价

#用法:变量=data[股票代码].close
last_price=data[g.security].close#取得最近日收盘价,命名为last_price

然后,获取近二十日股票收盘价的平均价

#用法:变量=data[股票代码].mavg(天数,‘close’)
#获取近二十日股票收盘价的平均价,命名为average_price
average_price=data[g.security].mavg(20,'close')

4 判断是否买卖

数据都获取完,该做买卖判断了

#如果昨日收盘价高出二十日平均价,则买入,否则卖出
iflast_price>average_price:
买入
eliflast_price<average_price:
卖出

问题来了,现在该写买卖下单了,但是拿多少钱去买我们还没有告诉计算机,所以每天还要获取账户里现金量。

#用法:变量=context.portfolio.cash
cash=context.portfolio.cash#取得当前的现金量,命名为cash

5 买入卖出

#用法:order_value(要买入股票股票的股票代码,要多少钱去买)
order_value(g.security,cash)#用当前所有资金买入股票
#用法:order_target(要买卖股票的股票代码,目标持仓金额)
order_target(g.security,0)#将股票仓位调整到0,即全卖出

6 策略代码写完,进行回测

把买入卖出的代码写好,策略就写完了,如下

definitialize(context):#初始化
g.security='002043.XSHE'#股票名:兔宝宝
defhandle_data(context,data):#每日循环
last_price=data[g.security].close#取得最近日收盘价
#取得过去二十天的平均价格
average_price=data[g.security].mavg(20,'close')
cash=context.portfolio.cash#取得当前的现金
#如果昨日收盘价高出二十日平均价,则买入,否则卖出。
iflast_price>average_price:
order_value(g.security,cash)#用当前所有资金买入股票
eliflast_price<average_price:
order_target(g.security,0)#将股票仓位调整到0,即全卖出

现在,在策略回测界面右上部,设置回测时间从20140101到20160601,设置初始资金100000,设置回测频率,然后点击运行回测。

7 建立模拟交易,使策略和行情实时连接自动运行

策略写好,回测完成,点击回测结果界面(如上图)右上部红色模拟交易按钮,新建模拟交易如下图。 写好交易名称,设置初始资金,数据频率,此处是每天,设置好后点提交。

8 开启微信通知,接收交易信号

点击聚宽导航栏我的交易,可以看到创建的模拟交易,如下图。 点击右边的微信通知开关,将OFF调到ON,按照指示扫描二维码,绑定微信,就能微信接收交易信号了。

㈨ 在python中如何删除文件的某一行

删除文件的某一行,可以跳过你要删除的行进行读写,如:

data=open(filename,'rt').readlines()
withopen(filename,'wt')ashandle:
handle.writelines(data[:tobedeleted])
handle.writelines(data[tobedeleted+1:])

其中data是逐行读取文件,

handle.writelines进行读写,跳过tobedeleted行

阅读全文

与pythonhandledata相关的资料

热点内容
翁虹电影大全 浏览:989
如何把文件夹改变为安装包 浏览:298
地震勘探pdf 浏览:689
c语言怎样给字符串加密 浏览:582
什么网站可以看剧情 浏览:533
cad图纸空间命令 浏览:135
GRA26K 浏览:479
单片机stm32实验心得体会 浏览:617
php压缩包如何安装 浏览:646
免费看慢网站 浏览:151
外国影片女孩头一次出去上外地 浏览:478
程序员创业接到小程序订单 浏览:391
java复用反编译代码 浏览:551
qq聊天发送的文件在哪个文件夹 浏览:819
代理服务器地址格式是什么意思 浏览:443
苏e行app为什么会有登录过期 浏览:800
杰森坐牢 下象棋是什么电影 浏览:408
苹果相机也么加密 浏览:891
java图片打印 浏览:173
恶魔小丑电影 浏览:548