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实现网页链接提取的方法分享
Feb 25 Python
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
python连接字符串的方法小结
Jul 13 Python
使用Python读写文本文件及编写简单的文本编辑器
Mar 11 Python
Sublime开发python程序的示例代码
Jan 24 Python
对pandas replace函数的使用方法小结
May 18 Python
python 日期排序的实例代码
Jul 11 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
Dec 04 Python
Python函数式编程实例详解
Jan 17 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 Python
asyncio异步编程之Task对象详解
Mar 13 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
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
PHP使用者状态管理功能的应用
2006/10/09 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
文本框的字数限制功能jquery插件
2009/11/24 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
Python2与Python3的区别点整理
2019/12/12 Python
python代码xml转txt实例
2020/03/10 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
AJAX都有哪些有点和缺点
2012/11/03 面试题
《孔繁森》教学反思
2014/04/17 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏