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爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
使用基于Python的Tornado框架的HTTP客户端的教程
Apr 24 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
Django添加feeds功能的示例
Aug 07 Python
python装饰器常见使用方法分析
Jun 26 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
基于Tensorflow:CPU性能分析
Feb 10 Python
python 调用js的四种方式
Apr 11 Python
手残删除python之后的补救方法
Jun 26 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的面向对象编程
2006/10/09 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
javascript奇异的arguments分析
2010/10/20 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
2013/08/21 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
Python引用模块和查找模块路径
2016/03/17 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
python 读入多行数据的实例
2018/04/19 Python
TensorFlow损失函数专题详解
2018/04/26 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
EJB的基本架构
2016/09/22 面试题
Java编程面试题
2016/04/04 面试题
历史系毕业生自荐信
2013/10/28 职场文书
新学期红领巾广播稿
2014/01/14 职场文书
四议两公开实施方案
2014/03/28 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
门店店长岗位职责
2015/04/14 职场文书
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server