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中基础的socket编程实战攻略
Jun 01 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
使用Python操作excel文件的实例代码
Oct 15 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
Nov 29 Python
python使用suds调用webservice接口的方法
Jan 03 Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 Python
python实现四人制扑克牌游戏
Apr 22 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
Python读取图像并显示灰度图的实现
Dec 01 Python
Django如何与Ajax交互
Apr 29 Python
Django实现drf搜索过滤和排序过滤
Jun 21 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.MVC的模板标签系统(五)
2006/09/05 PHP
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
PHP小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
使用dump函数,给php加断点测试
2013/06/25 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
jQuery 表格插件整理
2010/04/27 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
js创建对象的方式总结
2015/01/10 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
angular动态表单制作
2018/02/23 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python实现按行切分文本文件的方法
2016/04/18 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
Python八皇后问题解答过程详解
2019/07/29 Python
pymysql模块的操作实例
2019/12/17 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
成人大专自我鉴定范文
2013/10/19 职场文书
军训口号
2014/06/13 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android