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使用cookielib库示例分享
Mar 03 Python
python获取标准北京时间的方法
Mar 24 Python
修改Python的pyxmpp2中的主循环使其提高性能
Apr 24 Python
Python的时间模块datetime详解
Apr 17 Python
Python 50行爬虫抓取并处理图灵书目过程详解
Sep 20 Python
pytorch 状态字典:state_dict使用详解
Jan 17 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 Python
使用Python封装excel操作指南
Jan 29 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 Python
Python入门之使用pandas分析excel数据
May 12 Python
Python中json.dumps()函数的使用解析
May 17 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
文件上传的实现
2006/10/09 PHP
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python实现每次处理一个字符的三种方法
2014/10/09 Python
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
python中的decorator的作用详解
2018/07/26 Python
Django之模型层多表操作的实现
2019/01/08 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
eBay奥地利站:eBay.at
2019/07/24 全球购物
中英文自我评价常用句型
2013/12/19 职场文书
民族团结先进个人材料
2014/02/05 职场文书
股东协议书
2014/04/14 职场文书
学校安全生产承诺书
2014/05/23 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
环保志愿者活动方案
2014/08/14 职场文书
天猫活动策划方案
2014/08/21 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
心术观后感
2015/06/11 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL