Python—解析HTML页面(HTMLParser)
程序员文章站
2022-05-29 08:04:54
HTMLParser类的定义及常用方法 类的定义 HTMLParser主要是用来解析HTML文件(包括HTML中无效的标记)。 参数convert_charrefs表示是否将所有的字符引用自动转化为Unicode形式,Python3.5以后默认是True。 HTMLParser可以接收相应的HTML ......
htmlparser类的定义及常用方法
类的定义
- htmlparser主要是用来解析html文件(包括html中无效的标记)。
- 参数convert_charrefs表示是否将所有的字符引用自动转化为unicode形式,python3.5以后默认是true。
- htmlparser可以接收相应的html内容,并进行解析,遇到html的标签会自动调用相应的handler(处理方法)来处理,用户需要自己创建相应的子类来继承htmlparser,并且复写相应的handler方法。
- htmlparser不会检查开始标签和结束标签是否是一对。
常用方法
- htmlparser.feed(data):接收一个字符串类型的html内容,并进行解析。
- htmlparser.close():当遇到文件结束标签后进行的处理方法。如果子类要复写该方法,需要首先调用htmlparser累的close()。
- htmlparser.reset():重置htmlparser实例,该方法会丢掉未处理的html内容。
- htmlparser.getpos():返回当前行和相应的偏移量。
- htmlparser.handle_starttag(tag, attrs):对开始标签的处理方法。例如<div id="main">,参数tag指的是div,attrs指的是一个(name,value)的列表,即列表里面装的数据是元组。
- htmlparser.handle_endtag(tag):对结束标签的处理方法。例如</div>,参数tag指的是div。
- htmlparser.handle_startendtag(tag, attrs):识别没有结束标签的html标签,例如<img />等。
- htmlparser.handle_data(data):对标签之间的数据的处理方法。<tag>test</tag>,data指的是“test”。
- htmlparser.handle_comment(data):对html中注释的处理方法。
解释部分:
- tag表示的是html标签,attrs是一个列表,列表元素为一个个“(属性,值)”形式的元组。
- htmlparser会自动将tag和attrs都转为小写。
实例应用
try:
from htmlparser import htmlparser
except:
from html.parser import htmlparser
class myhtmlparser(htmlparser):
def __init__(self):
htmlparser.__init__(self)
self.data = [] # 定义data数组用来存储html中的数据
self.links = []
def handle_starttag(self, tag, attrs):
print('<%s>' % tag)
if tag == "a":
if len(attrs) == 0: pass
else:
for (variable, value) in attrs:
if variable == "href":
self.links.append(value)
def handle_endtag(self, tag):
print('</%s>' % tag)
def handle_startendtag(self, tag, attrs):
print('<%s/>' % tag)
def handle_data(self, data):
print('data===>', data)
def handle_comment(self, data):
print('<!--', data, '-->')
def handle_entityref(self, name):
print('&%s;' % name)
def handle_charref(self, name):
print('&#%s;' % name)
if __name__ == "__main__":
html_code = '''<html>
<head>这是头标签</head>
<body>
<!-- test html parser -->
<p>some <a href=\"#\">html</a> html Ӓ ӓtutorial...<br>end</p>
</body></html>'''
parser = myhtmlparser()
parser.feed(html_code)
parser.close()
print(parser.data)
print(parser.links)
处理html转义字符
在 html 中 <、>、& 等字符有特殊含义(<,> 用于标签中,& 用于转义),他们不能在 html 代码中直接使用,如果要在网页中显示这些符号,就需要使用 html 的转义字符串(escape sequence),例如 < 的转义字符是 <,浏览器渲染 html 页面时,会自动把转移字符串换成真实字符。
转义字符(escape sequence)由三部分组成:第一部分是一个 & 符号,第二部分是实体(entity)名字,第三部分是一个分号。 比如,要显示小于号(<),就可以写 <。
html = '<abc>'
# 反转义:方式1
try:
from htmlparser import htmlparser
except:
from html.parser import htmlparser
html_parser = htmlparser()
text = html_parser.unescape(html)
print(text)
# 反转义:方式2
import html
text = html.unescape('a=1&b=2')
print(text)
# 转义
import cgi
html = cgi.escape(text)
print(html)
下一篇: 使用python的一些笔记
推荐阅读
-
Python中使用HTMLParser解析html实例
-
对Python3 解析html的几种操作方式小结
-
Python使用lxml模块和Requests模块抓取HTML页面的教程
-
python解析html开发库pyquery使用方法
-
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
-
Python正则表达式匹配HTML页面编码
-
Python下利用BeautifulSoup解析HTML的实现
-
Python HTML解析模块HTMLParser用法分析【爬虫工具】
-
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
-
Python使用urllib2模块抓取HTML页面资源的实例分享