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 ...
随机推荐
- 不一样的ssm
这里的ssm不是指的spring+springmvc+mybatis,而是指的spring+springmvc+mongodb,下面我将搭建一个简单的“ssm”框架. 1.新建一个maven项目,骨架 ...
- Spring Boot 系列(七)Swagger2-生成RESTful接口文档
Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服 ...
- Go语言的map如何判断key是否存在
判断方式为value,ok := map[key], ok为true则存在 package main import "fmt" func main() { demo := map[ ...
- Go实用开源库收集
框架 https://github.com/go-martini/martini 图形验证码 https://github.com/dchest/captcha ORM https://github. ...
- 设计模式之装饰模式,session共享的底层原理
前言 还记得当初写spring-session实现分布式集群session的共享的时候,里面有说到利用filter和HttpServletRequestWrapper可以定制自己的getSession ...
- HBuilder + PHP开发环境配置
HBuilder 集成开发环境简介 HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE.HBuilder的编写用到了Java.C.Web和Ruby.HBuilde ...
- JAVA & .NET创建对象构造函数调用顺序
JAVA 定义Person类 package models; public class Person { public Person() { System.out.println("pe ...
- 4. explain简介
一.是什么 使用 explain 关键字可以模拟优化器执行SQl查询语句,从而知道 mysql 是如何处理你的sql语句的.分析你的查询语句或是表的结构的性能瓶颈. 二.能干嘛 表的读取顺序 数据读取 ...
- Redis学习一(基础入门).
一.前言 Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.key-Value 的数据库.并提供多种语言的API. 通常,Redis 将数据存储于 ...
- form表单基础知识
form 元素是块级元素 ------------------- ------------------- ----------------------------------------------- ...