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 相关文章推荐
Python3基础之输入和输出实例分析
Aug 18 Python
Python json模块使用实例
Apr 11 Python
Python中的lstrip()方法使用简介
May 19 Python
在Django同1个页面中的多表单处理详解
Jan 25 Python
python 读写中文json的实例详解
Oct 29 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
用pycharm开发django项目示例代码
Oct 24 Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 Python
python实践项目之监控当前联网状态详情
May 23 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
Aug 28 Python
django下创建多个app并设置urls方法
Aug 02 Python
只用50行Python代码爬取网络美女高清图片
Jun 02 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(1)
2006/10/09 PHP
php打造属于自己的MVC框架
2012/03/07 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
JS获取父节点方法
2009/08/20 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
js阻止事件追加的具体实现
2014/10/15 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
Jquery异步提交表单代码分享
2015/03/26 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
JS高级技巧(简洁版)
2018/07/29 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
python编写微信远程控制电脑的程序
2018/01/05 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
详解Django中异步任务之django-celery
2020/11/05 Python
介绍一下Ruby的特点
2013/01/20 面试题
会计主管岗位职责范文
2013/11/08 职场文书
日语系毕业生推荐信
2013/11/11 职场文书
高级方案规划工程师岗位职责
2013/11/29 职场文书
大学校园生活自我鉴定
2014/01/13 职场文书
社区党员先进事迹
2014/01/22 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
同学会邀请函模板
2015/01/30 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
2016年少先队活动总结
2016/04/06 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
React Fragment介绍与使用详解
2021/11/11 Javascript