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逐行读取文件内容的三种方法
Jan 20 Python
python读写ini配置文件方法实例分析
Jun 30 Python
python比较两个列表是否相等的方法
Jul 28 Python
分享Python字符串关键点
Dec 13 Python
Python实现简单登录验证
Apr 13 Python
Python利用IPython提高开发效率
Aug 10 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
python机器学习之神经网络(三)
Dec 20 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
python实现屏保程序(适用于背单词)
Jul 30 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无限分类的深入理解
2013/06/02 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
PHP+jQuery 注册模块开发详解
2014/10/14 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
vue router+vuex实现首页登录验证判断逻辑
2018/05/17 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
详解Vue之事件处理
2020/07/10 Javascript
Python正则表达式匹配中文用法示例
2017/01/17 Python
详解python eval函数的妙用
2017/11/16 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
企业业务员岗位职责
2014/03/14 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
学生干部培训方案
2014/06/12 职场文书
护林员个人总结
2015/03/04 职场文书
工作简历的自我评价
2019/05/16 职场文书