概述
HTML是的HyperText Markup Language缩写,翻译为: 超文本标记语言,标准通用标记语言下的一个应用。
“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。
超文本标记语言的结构包括“头”部分(英语:Head)、和“主体”部分(英语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。
我们看一个基本的html的结构:
<html>
<head>
<title>我是标题</title>
</head>
<body>
我是主体内容
</body>
</html>
HTML操作是编程中很重要的一块,下面介绍下Python3.x中的html.parser中的HTMLParser类。
HTMLParser的定义 class html.parser.HTMLParser(*, convert_charrefs=True)
下面我们看一看HTMLParser常用的方法
HTMLParser常用方法
下面我看使用HTMLParser来博客网首页的所有a(链接)节点进行解析出来。
#-*- coding:utf-8 -*-
__author__ = "苦叶子"
from html.parser import HTMLParser
import http.client
class BlogHTMLParser(HTMLParser):
data = []
data_key = ""
def __init__(self):
HTMLParser.__init__(self)
self.is_a = False
def handle_starttag(self, tag, attrs):
# 处理开始为a的标签
if tag == "a":
self.is_a = True
for name,value in attrs:
if name == "href":
# 提取a的href属性值
self.data_key = value
def handle_data(self, data):
# 处理结束为a的标签
if self.is_a and self.lasttag == "a":
# 将a标签的href属性值作为key, a的文本作为data构建字典
self.data.append({self.data_key : data})
def handle_endtag(self, tag):
# 处理a结束标签
if self.is_a and self.lasttag == "a":
self.is_a = False
def get_data(self):
# 返回所有从a中提取到的目标数据
return self.data
if __name__ == "__main__":
print("python HTML解析实例")
print("访问博客网,获取首页html源码")
# 构建博客园链接
conn = http.client.HTTPSConnection("www.cnblogs.com")
# 获取博客园首页html源码
conn.request("GET", "/")
r1 = conn.getresponse()
data = r1.read().decode(encoding="utf-8")
# print(data)
# 解析博客园首页html源码,提取所有a的href和文本数据
blogHtmlParser = BlogHTMLParser()
blogHtmlParser.feed(data)
links = blogHtmlParser.get_data()
# 打印提取的结果
print(links)
说明下上述代码运行的流程:
本示例可以说是一个最最最简单的爬虫示例了,为什么要去掌握这个呢?我想可能会有以下简单的应用场景: