Python之学习笔记(内建模块html,xml)

代码

# -*- coding: utf-8 -*-

'内建模块'

import itertools
from xml.parsers.expat import ParserCreate
from HTMLParser import HTMLParser
from htmlentitydefs import name2codepoint

class DefaultSaxHandler(object):
    def start_element(self, name, attrs):
        print('sax:start_element: %s, attrs: %s' % (name, str(attrs)))

    def end_element(self, name):
        print('sax:end_element: %s' % name)

    def char_data(self, text):
        print('sax:char_data: %s' % text)

xml = r'''<?xml version="1.0"?>
<ol>
    <li><a href="/python">Python</a></li>
    <li><a href="/ruby">Ruby</a></li>
</ol>
'''

handler = DefaultSaxHandler()
parser = ParserCreate()
parser.returns_unicode = True
parser.StartElementHandler = handler.start_element
parser.EndElementHandler = handler.end_element
parser.CharacterDataHandler = handler.char_data
parser.Parse(xml)

ns = itertools.repeat('A',10)
for n in ns:
    print n

'''
cs = itertools.cycle('ABC') # 注意字符串也是序列的一种

for c in cs:
    print c

natuals = itertools.count(1)
for n in natuals:
    print n
# chain()可以把一组迭代对象串联起来,形成一个更大的迭代器
for c in chain('ABC','XYZ'):
    print c
'''
for key, group in itertools.groupby('AAABBBCCAAA'):
    print key, list(group) # 为什么这里要用list()函数呢?

for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c.upper()):
    print key, list(group)

for x in itertools.imap(lambda x, y: x * y, [10, 20, 30], itertools.count(1)):
    print x

r = itertools.imap(lambda x: x*x, itertools.count(1))
for n in itertools.takewhile(lambda x: x<100, r):
    print n

# ifilter()就是filter()的惰性实现
# 惰性计算是获取迭代对象,只有运行的时候才会

### XML
# DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点
# SAX是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件
# 在Python中使用SAX解析XML非常简洁,通常我们关心的事件是start_element,end_element和char_data
# 准备好这3个函数,然后就可以解析xml了

### HTMLParser来非常方便地解析HTML
class MyHTMLParser(HTMLParser):

    def handle_starttag(self, tag, attrs):
        print('<%s>' % tag)

    def handle_endtag(self, tag):
        print('</%s>' % tag)

    def handle_startendtag(self, tag, attrs):
        print('<%s/>' % tag)

    def handle_data(self, data):
        print('data')

    def handle_comment(self, data):
        print('<!-- -->')

    def handle_entityref(self, name):
        print('&%s;' % name)

    def handle_charref(self, name):
        print('&#%s;' % name)

parser = MyHTMLParser()
parser.feed('<html><head></head><body><p>Some <a href=\"#\">html</a> tutorial...<br>END</p></body></html>')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值