python入门学习之HTML解析

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

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'的解析感觉不是很完美,需以后改进。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值