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 21 Python
web.py在模板中输出美元符号的方法
Aug 26 Python
浅析Python中的多条件排序实现
Jun 07 Python
python机器人行走步数问题的解决
Jan 29 Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
May 07 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
Python测试模块doctest使用解析
Aug 10 Python
Python Web框架之Django框架Form组件用法详解
Aug 16 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 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的FTP学习(四)
2006/10/09 PHP
实用函数9
2007/11/08 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
php类中private属性继承问题分析
2012/11/01 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
原生JS实现的放大镜特效示例【测试可用】
2018/12/08 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
详解Python命令行解析工具Argparse
2016/04/20 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
简单了解Python中的几种函数
2017/11/03 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
Python实现的企业粉丝抽奖功能示例
2019/07/26 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
学习心得体会
2014/01/01 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
大班开学家长寄语
2014/04/04 职场文书
管理工程专业求职信
2014/08/10 职场文书
解除劳动合同证明书
2014/09/26 职场文书
音乐教师个人总结
2015/02/06 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL