Python HTML解析模块HTMLParser(爬虫工具)
简介
先简略介绍一下。实际上,HTMLParser是python用来解析HTML的内置模块。它可以分析出HTML里面的标签、数据等等,是一种处理HTML的简便途径。HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理。它主要的用户回调函数的命名都是以"handle_"开头的,都是HTMLParser的成员函数。当我们使用时,就从HTMLParser派生出新的类,然后重新定义这几个以"handle_"开头的函数即可。这几个函数包括:
(1)handle_startendtag 处理开始标签和结束标签(即单标签)
(2)handle_starttag 处理开始标签,比如<xx>
(3)handle_endtag 处理结束标签,比如</xx>
(4)handle_charref 处理特殊字符串,就是以&#开头的,一般是内码表示的字符
(5)handle_entityref 处理一些特殊字符,以&开头的,比如
(6)handle_data 处理数据,就是<xx>data</xx>中间的那些数据
(7)handle_comment 处理注释
(8)handle_decl 处理<!开头的,比如<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
(9)handle_pi 处理形如<?instruction>的东西
实例
OK,废话少说,直接上手,来一个简单的爬虫实例——抓取贴吧图片。
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 HTML解析模块HTMLParser(爬虫工具)的更多相关文章
- Python HTML解析器BeautifulSoup(爬虫解析器)
BeautifulSoup简介 我们知道,Python拥有出色的内置HTML解析器模块——HTMLParser,然而还有一个功能更为强大的HTML或XML解析工具——BeautifulSoup(美味的 ...
- 关于解决Python中requests模块在PyCharm工具中导入问题
问题引入: 今天在学习Python网络请求的时候,导入requests模块时一直报红色波浪线,如图: 反复折腾,一直以为自己没有安装requests模块,反复安装反复卸载: 安装方法: 首先 cd 进 ...
- python 配置文件解析模块 configparser
import ConfigParser //实例化cf = ConfigPraser.ConfigPraser()cf.read("配置文件") //获取所有sections.也就 ...
- 面试官问我:如何在 Python 中解析和修改 XML
摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- python爬虫工具集合
python爬虫工具集合 大家一起来整理吧!强烈建议PR.这是初稿,总是有很多问题,而且考虑不全面,希望大家支持! 源文件 主要针对python3 常用库 urllib Urllib是python提供 ...
- Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗
介绍 本篇博客将会介绍一个Python爬虫,用来爬取各个国家的国旗,主要的目标是为了展示如何在Python的requests模块中使用POST方法来爬取网页内容. 为了知道POST方法所需要传 ...
- python爬虫工具
一直都听说python写爬虫工具非常方便,为了获取数据,我也要写点爬虫,但是python太灵活了,不知道python爬虫要哪些框架,要了解,比如beatiful soup,scrapy, 爬虫的额主要 ...
- python命令行参数解析模块argparse和docopt
http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...
随机推荐
- 解决关于:TypeError: Class constructor Model cannot be invoked without 'new'
问题描述:在工作过程中出现 TypeError: Class constructor Model cannot be invoked without 'new' 这个错误 以下是报错代码: class ...
- IdentityServer4(9)- 使用OpenID Connect添加用户身份验证(implicit)
本文为 OpenID Connect 简化模式(implicit) 已更新至.NET Core 2.2 在本快速入门中,我们希望通过 OpenID Connect 协议向我们的 IdentitySer ...
- Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)
1. 输出重定向 最基本的重定向是将命令的输出发送到一个文件中.在bash shell中用大于号(>) ,格式如下:command > inputfile.例如:将date命令的输出内容, ...
- git无法提交问题
今天在git提交时遇到一个问题,如下图 根据它的提示手动删除index.lock文件就可以了. 那为什么会有这个index.lock文件呢?我就觉得是莫名其妙出现的,别人的解释是这样的: 在你进行某些 ...
- PHP错误报告级别
error_reporting = E_ALL & ~E_NOTICE ; 错误报告级别是位字段的叠加,推荐使用 E_ALL | E_STRICT ; 1 E_ERROR 致命的运行时错误 ; ...
- python 要掌握面向对象,你得会做这些题
1,面向对象三大特性,各有什么用处,说说你的理解. 继承:解决代码重用问题 多态:多态性,可以在不考虑对象类型的情况下而直接使用对象 封装:明确的区分内外,控制外部对隐藏属性的操作行为,隔离复杂度 2 ...
- Hibernate学习(七)———— hibernate中查询方式详解
序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等 --WH 一.hibernate中的5种 ...
- 深入理解Java虚拟机阅读心得(一)
JVM(Java Virtual Machine) 即Java虚拟机,是一种用于计算设备的规范,用于运行Java程序编译后得到的字节码文件(Class文件) 一.JVM的内存区域 1.程序计数器(Pr ...
- [总结]数论和组合计数类数学相关(定理&证明&板子)
0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...
- man exportfs(exportfs命令中文手册)
本人译作集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.html exportfs() System Manager's Manual exportfs ...