【Python入门】常用自带模块之HTMLParser

学习python的第7天

Python的自带模块——HTMLParser的初步学习
 

HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析。
本文主要简单讲一下HTMLParser的用法。

使用时需要定义一个从模块html.parser中的类HTMLParser继承的类,重定义函数:

handle_starttag( tag, attrs)
handle_startendtag( tag, attrs)
handle_endtag( tag)
handle_data(data)

1.获取标签属性

tag是html的标签,attrs是(属性,值)tuple组成的list

如一个标签为:

<input type="hidden" name="NXX" id="IDXX" value="VXX" />

那么其attrs列表为:

[(‘type’, ‘hidden’), (‘name’, ‘NXX’), (‘id’, ‘IDXX’), (‘value’, ‘VXX’)]
  • HTMLParser自动将tagattrs都转为小写。

2.获取标签内容

解析时碰到<***>,自动调用handle_starttag();碰到</***>,自动调用handle_endtag()
每一个标签,无论<> 还是</>,均会调用handle_data()

html中第一行、第二行分别为<html>和<head>,后面无具体数据,只有回车换行,所以调用handle_data(),打印结果为换行;</html></head>同理。

3.一个简单的例子

获取豆瓣上正在上映影片的基本信息

# encoding=utf8
from urllib import request
import urllib
from html.parser import HTMLParser
from html.entities import name2codepoint


class Myparser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.movies = []

    def handle_starttag(self, tag, attrs):
        #此处得到的attrs即为根据tags解析出来的list,形式为[('属性1','值1'),('属性2','值2'),('属性3','值3')]
        def _attr(attrlist, attrname):
            #此函数用于后续通过查找某一属性来确定要找的标签
            for each in attrlist:
                if attrname == each[0]:
                    return each[1]
            return None

        if tag == 'li' and _attr(attrs, 'data-actors'):
            movie = {}
            movie['actors'] = _attr(attrs, 'data-actors')
            movie['director'] = _attr(attrs, 'data-director')
            movie['duration'] = _attr(attrs, 'data-dutation')
            movie['title'] = _attr(attrs, 'data-title')
            movie['rate'] = _attr(attrs, 'data-rate')
            self.movies.append(movie)


parser = Myparser()
url = 'https://movie.douban.com/'

if __name__ == '__main__':
    with urllib.request.urlopen(url) as f:
        data = f.read()#将url中内容全部读取出来
        parser.feed(data.decode('utf-8'))#将读取出来的内容解析
        for each in parser.movies:
            print('%(title)s|%(rate)s|%(actors)s|%(director)s|%(duration)s' % each)

结果如下:

runfile('D:/codes/python/20190226/test_douban.py', wdir='D:/codes/python/20190226')
阿丽塔:战斗天使 Alita: Battle Angel|7.6|罗莎·萨拉查 / 克里斯托弗·沃尔兹 / 基恩·约翰逊|罗伯特·罗德里格兹|None
三变山变|||彭兰玉|None
流浪地球|7.9|屈楚萧 / 吴京 / 李光洁|郭帆|None
飞驰人生|7.0|沈腾 / 黄景瑜 / 尹正|韩寒|None
疯狂的外星人|6.4|黄渤 / 沈腾 / 汤姆·派福瑞|宁浩|None
朝花夕誓 さよならの朝に約束の花をかざろう|7.0|石见舞菜香 / 入野自由 / 茅野爱衣|冈田磨里|None
一吻定情|5.3|王大陆 / 林允 / 陈柏融|陈玉珊|None
新喜剧之王|5.8|王宝强 / 鄂靖文 / 张全蛋|周星驰|None
熊出没·原始时代|6.5|张伟 / 张秉君 / 谭笑|丁亮|None
廉政风云 廉政風雲 煙幕|5.5|刘青云 / 张家辉 / 林嘉欣|麦兆辉|None
神探蒲松龄|4.1|成龙 / 阮经天 / 钟楚曦|严嘉|None
古井凶灵||程韦然 / 陈美林 / 李易芸|王辰六|None
今夜在浪漫剧场 今夜、ロマンス劇場で|7.2|绫濑遥 / 坂口健太郎 / 本田翼|武内英树|None
小猪佩奇过大年|4.0|朱亚文 / 刘芸 / 归亚蕾|张大鹏|None
白蛇:缘起|8.0|张喆 / 杨天翔 / 唐小喜|黄家康|None
大黄蜂 Bumblebee|7.1|海莉·斯坦菲尔德 / 小豪尔赫·兰登伯格 / 约翰·塞纳|特拉维斯·奈特|None
燃点|6.3|罗永浩 / 戴威 / 张颖|关琇|None
五十米之恋||谢楠 / 方力申 / 仇佩佩|李依理|None

 

按DOM模型解析html文件的工具包 已下是源码列表: META-INF/MANIFEST.MF META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans.BeanyBaby.class org.htmlparser.beans.FilterBean.class org.htmlparser.beans.HTMLLinkBean.class org.htmlparser.beans.HTMLTextBean.class org.htmlparser.beans.LinkBean.class org.htmlparser.beans.StringBean.class org.htmlparser.filters.AndFilter.class org.htmlparser.filters.CssSelectorNodeFilter.class org.htmlparser.filters.HasAttributeFilter.class org.htmlparser.filters.HasChildFilter.class org.htmlparser.filters.HasParentFilter.class org.htmlparser.filters.HasSiblingFilter.class org.htmlparser.filters.IsEqualFilter.class org.htmlparser.filters.LinkRegexFilter.class org.htmlparser.filters.LinkStringFilter.class org.htmlparser.filters.NodeClassFilter.class org.htmlparser.filters.NotFilter.class org.htmlparser.filters.OrFilter.class org.htmlparser.filters.RegexFilter.class org.htmlparser.filters.StringFilter.class org.htmlparser.filters.TagNameFilter.class org.htmlparser.http.HttpHeader.class org.htmlparser.sax.Attributes.class org.htmlparser.sax.Feedback.class org.htmlparser.sax.Locator.class org.htmlparser.sax.XMLReader.class org.htmlparser.scanners.CompositeTagScanner.class org.htmlparser.scanners.JspScanner.class org.htmlparser.scanners.ScriptDecoder.class org.htmlparser.scanners.ScriptScanner.class org.htmlparser.scanners.StyleScanner.class org.htmlparser.tags.AppletTag.class org.htmlparser.tags.BaseHrefTag.class org.htmlparser.tags.BlockquoteTag.class org.htmlparser.tags.BodyTag.class org.htmlparser.tags.Bullet.class org.htmlparser.tags.BulletList.class org.htmlparser.tags.CompositeTag.class org.htmlparser.tags.DefinitionList.class org.htmlparser.tags.DefinitionListBullet.class org.htmlparser.tags.Div.class org.htmlparser.tags.DoctypeTag.class org.htmlparser.tags.FormTag.class org.htmlparser.tags.FrameSetTag.class org.htmlparser.tags.FrameTag.class org.htmlparser.tags.HeadTag.class org.htmlparser.tags.HeadingTag.class org.htmlparser.tags.Html.class org.htmlparser.tags.ImageTag.class org.htmlparser.tags.InputTag.class org.htmlparser.tags.JspTag.class org.htmlparser.tags.LabelTag.class org.htmlparser.tags.LinkTag.class org.htmlparser.tags.MetaTag.class org.htmlparser.tags.ObjectTag.class org.htmlparser.tags.OptionTag.class org.htmlparser.tags.ParagraphTag.class org.htmlparser.tags.ProcessingInstructionTag.class org.htmlparser.tags.ScriptTag.class org.htmlparser.tags.SelectTag.class org.htmlparser.tags.Span.class org.htmlparser.tags.StyleTag.class org.htmlparser.tags.TableColumn.class org.htmlparser.tags.TableHeader.class org.htmlparser.tags.TableRow.class org.htmlparser.tags.TableTag.class org.htmlparser.tags.TextareaTag.class org.htmlparser.tags.TitleTag.class org.htmlparser.util.CharacterReference.class org.htmlparser.util.CharacterReferenceEx.class org.htmlparser.util.DefaultParserFeedback.class org.htmlparser.util.FeedbackManager.class org.htmlparser.util.IteratorImpl.class org.htmlparser.util.NodeTreeWalker.class org.htmlparser.util.ParserFeedback.class org.htmlparser.util.ParserUtils.class org.htmlparser.util.Translate.class org.htmlparser.visitors.HtmlPage.class org.htmlparser.visitors.LinkFindingVisitor.class org.htmlparser.visitors.ObjectFindingVisitor.class org.htmlparser.visitors.StringFindingVisitor.class org.htmlparser.visitors.TagFindingVisitor.class org.htmlparser.visitors.TextExtractingVisitor.class org.htmlparser.visitors.UrlModifyingVisitor.class org/htmlparser/beans/images/Chain16.gif org/htmlparser/beans/images/Chain32.gif org/htmlparser/beans/images/Knot16.gif org/htmlparser/beans/images/Knot32.gif
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值