Python HTML解析模块HTMLParser用法分析【爬虫工具】


Posted in Python onApril 05, 2019

本文实例讲述了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相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中logging模块的用法实例
Sep 29 Python
python实现画一颗树和一片森林
Jun 25 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
Python单元测试工具doctest和unittest使用解析
Sep 02 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
django迁移文件migrations的实现
Mar 31 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
python适合做数据挖掘吗
Jun 16 Python
Python如何将模块打包并发布
Aug 30 Python
python如何利用paramiko执行服务器命令
Nov 07 Python
在Django中使用MQTT的方法
May 10 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 #Python
Python3.5多进程原理与用法实例分析
Apr 05 #Python
Python选择网卡发包及接收数据包
Apr 04 #Python
详解Python的数据库操作(pymysql)
Apr 04 #Python
python dlib人脸识别代码实例
Apr 04 #Python
python图像处理入门(一)
Apr 04 #Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 #Python
You might like
最简单的PHP程序--记数器
2006/10/09 PHP
用php实现让页面只能被百度gogole蜘蛛访问的方法
2009/12/29 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
Python实现批量更换指定目录下文件扩展名的方法
2016/09/19 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
Python帮你识破双11的套路
2019/11/11 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
python3字符串输出常见面试题总结
2020/12/01 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
医学检验专业个人求职信范文
2013/12/04 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
高温慰问简报
2015/07/21 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server