Python HTMLParser模块详解与贴吧图片抓取实战
本文深入解析Python内置HTMLParser模块的工作原理,详细列举handle_starttag等核心回调函数。通过一个完整的贴吧图片抓取实例,演示如何继承HTMLParser并重写方法以提取GIF和JPG链接,实现自动下载功能,为Python爬虫开发提供实用参考。
本文详细介绍Python中HTML解析模块HTMLParser的具体用法,旨在为读者提供清晰的参考与指导。
HTMLParser模块简介
简介
HTMLParser是Python标准库中用于解析HTML文档的内置模块,能够高效提取HTML中的标签及数据,是处理HTML内容的便捷工具。该模块基于事件驱动模式运行:当解析器识别到特定标记时,会触发调用用户自定义的回调函数。这些回调函数通常以"handle_"为前缀,且均为HTMLParser类的成员函数。使用时,需从HTMLParser派生新类,并重新定义相关的手柄函数即可实现自定义解析逻辑。
核心手柄函数详解
主要的手柄函数包括: (1)handle_startendtag:用于处理自闭合标签(即单标签)。 (2)handle_starttag:用于处理开始标签,例如<xx>。 (3)handle_endtag:用于处理结束标签,例如</xx>。 (4)handle_charref:用于处理以&#开头的特殊字符串,通常表示由内码表示的字符。 (5)handle_entityref:用于处理以&开头的特殊字符实体,例如 。 (6)handle_data:用于处理标签内的文本数据,即<xx>与</xx>之间的内容。 (7)handle_comment:用于处理HTML注释。 (8)handle_decl:用于处理以<!开头的声明,例如<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"。 (9)handle_pi:用于处理形如<?instruction>的处理指令。
贴吧图片抓取实战
实例
接下来通过一个具体的爬虫案例进行演示:抓取百度贴吧中的图片。
from html.parser import HTMLParser
from urllib import request
class MyHTMLParser(HTMLParser): # 创建HTML解析类
def __init__(self):
HTMLParser.__init__(self)
self.gifs_urls = [] # 创建列表,保存gif
self.jpgs_urls = [] # 创建列表,保存jpg
# 重写HTMLParser中的内置方法
def handle_starttag(self, tags, attrs): # 处理起始标记
if tags == 'img': # 处理图片
for attr in attrs:
for t in attr:
if 'gif' in t and 'https' in t:
self.gifs_urls.append(t) # 添加到gif列表
elif 'jpg' in t and 'https' in t:
self.jpgs_urls.append(t) # 添加到jpg列表
else:
pass
# 自定义的方法
def get_gifs(self): # 返回gif列表
return self.gifs_urls
def get_jpgs(self): # 返回jpg列表
return self.jpgs_urls
# 自定义的方法,获取页面
def getHTML(self,url):
req=request.Request(url,method='GET')
html=request.urlopen(req,timeout=30)
return html.read()
# 自定义的方法,批量下载图片
def downImgs(self,img_urls,n=10,path='Image/'):
count=1
for url in img_urls:
request.urlretrieve(url=url,filename='{0}{1}{2}'.format(path,count,'.jpg'))
count=count+1
if count == n + 1:
print('共下载%d张图片' %(n))
return
if __name__ == '__main__':
Url = 'http://tieba.baidu.com/p/2256306796'
HtmlParser=MyHTMLParser()
Html=HtmlParser.getHTML(Url)
# print(Html)
HtmlParser.feed(str(Html)) #开始解析HTML,自动调用HTMLParser中的内置方法
HtmlParser.downImgs(HtmlParser.get_jpgs())
如需了解更多Python相关知识,可参考本站系列教程:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。
希望本文的内容能对您的Python编程学习有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









