您的位置:首页 > 编程语言 > Python开发

python入门学习之HTML解析

2014-09-11 20:08 411 查看
这是参照廖雪峰老师的教程(链接)写的抓取网页特定信息的代码。感觉代码还不够简练,日后需要优化。

import urllib3
from HTMLParser import HTMLParser
from htmlentitydefs import name2codepoint, entitydefs

class MyHTMLParser(HTMLParser):

def __init__(self):
HTMLParser.__init__(self)
self.h3 = None
self.time = None
self.span = None
self.speci = False
self.date = ''

def handle_starttag(self, tag, attrs):
if 'h3'==tag:
for href, link in attrs:
if 'event-title'==link:
self.h3 = tag
if 'time'==tag:
for href, link in attrs:
if 'datetime'==href:
self.time = tag
self.date += link
if 'span'== tag:
for href, link in attrs:
if 'event-location'==link:
self.span = tag

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

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

def handle_data(self, data):
if 'h3'==self.h3:
print'conference title:',data
self.h3 = None
if 'time'==self.time:
self.date+=data
if self.speci:
self.date += data
self.speci = False
self.time = None
print self.date
self.date = ''
if 'span'==self.span:
print 'event-location:',data
self.span = None
print '\n'

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

def handle_entityref(self, name):
if 'ndash'==name:
self.date+='-'
self.speci = True

def handle_charref(self, name):
pass
parser = MyHTMLParser()
url = "https://www.python.org/events/python-events/"
response = urllib2.urlopen(url)
page = response.read()
parser.feed(page)
注意:类中 有个self.date 变量,我让它初始化为空的字符串,但在中间的函数处理过程中我无意将其赋值为None,导致我之后想做‘+’的字符串连接老是报告错误。

抓取网页特定内容的代码。由于知识累积的少,代码中对于特殊字符'&ndash'的解析感觉不是很完美,需以后改进。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python