[转载]python模块学习---HTMLParser(解析HTML文档元素)

转自:http://blog.csdn.net/hxsstar/article/details/17241709

HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析。

本文主要简单讲一下HTMLParser的用法.

使用时需要定义一个从类HTMLParser继承的类,重定义函数:
handle_starttag( tag, attrs)
handle_startendtag( tag, attrs)
handle_endtag( tag)

来实现自己需要的功能。

tag是的html标签,attrs是 (属性,值)元组(tuple)的列表(list)。
HTMLParser自动将tag和attrs都转为小写。

下面给出的例子抽取了html中的所有链接:(在PYTHON3.3版本中)

[python] view plaincopy

  1. from html.parser import HTMLParser
  2. class MyHTMLParser(HTMLParser):
  3. def __init__(self):
  4. HTMLParser.__init__(self)
  5. self.links = []
  6. def handle_starttag(self, tag, attrs):
  7. #print "Encountered the beginning of a %s tag" % tag
  8. if tag == "a":
  9. if len(attrs) == 0:
  10. pass
  11. else:
  12. for (variable, value) in attrs:
  13. if variable == "href":
  14. self.links.append(value)
  15. if __name__ == "__main__":
  16. html_code = """ <a href="www.google.com"> google.com</a> <A Href="www.pythonclub.org"> PythonClub </a> <A HREF = "www.sina.com.cn"> Sina </a> """
  17. hp = MyHTMLParser()
  18. hp.feed(html_code)
  19. hp.close()
  20. print(hp.links)

运行结果为:

[‘www.google.com‘, ‘www.pythonclub.org‘, ‘www.sina.com.cn‘]

---------------------------------------------

显示HTML中<a>标签之间的文字:

[python] view plaincopy

  1. from html.parser import HTMLParser
  2. page =‘‘‘‘‘<sada>啊啊啊</sada><a href="http://click.union.360buy.com/JdClick /?unionId=75" class="f1"  style="padding-left:13px; padding-right:14px">京东商城</a></td><td><a href="http://www.letao.com /?source=hao123" class="f1">乐淘网上鞋城</a></td><td><a href="http://www.lashou.com/cl_today/w_3001" class="f2">拉手团购</a></td><td><a href="http://www.amazon.cn/?tag=2009hao123famousdaohang" class="f2">亚马逊</a></td><td><a href="http://www.vancl.com/?source=hao123mp"  class="f1">凡客诚品</a></td><td><a href="http://reg.jiayuan.com/st/?id=3237&url=/st /main.php" class="f1">世纪佳缘‘‘‘
  3. class hp(HTMLParser):
  4. a_text = False
  5. def handle_starttag(self,tag,attr):
  6. if tag == ‘a‘:
  7. self.a_text = True
  8. #print (dict(attr))
  9. def handle_endtag(self,tag):
  10. if tag == ‘a‘:
  11. self.a_text = False
  12. def handle_data(self,data):
  13. if self.a_text:
  14. print (data)
  15. yk = hp()
  16. yk.feed(page)
  17. yk.close()

运行结果如下:

京东商城
乐淘网上鞋城
拉手团购
亚马逊
凡客诚品
世纪佳缘

注:在eclipse中的pydev中调试,记得中文编码问题,在项目中右键改编码为utf-8

----------------------------------------------------------------

如果想抽取图形链接

<img src=‘http://www.google.com/intl/zh-CN_ALL/images/logo.gif‘ />

就要重定义 handle_startendtag( tag, attrs) 函数

----------------------------------------------------------------

HTMLParser是python用来解 析html的模块。它可以分析出html里面的标签、数据等等,是一种处理html的简便途径。 HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理。它主要的用户回调函数的命名都是以handler_开头的,都是HTMLParser的成员函数。当我们使用时,就从HTMLParser派生出新的类,然后重新定义这几个以handler_开头的函数即可。这几个函数包括:
handle_startendtag 处理开始标签和结束标签
handle_starttag 处理开始标签,比如<xx>
handle_endtag 处理结束标签,比如</xx>
handle_charref 处理特殊字符串,就是以&#开头的,一般是内码表示的字符
handle_entityref 处理一些特殊字符,以&开头的,比如  
handle_data 处理数据,就是<xx>data</xx>中间的那些数据
handle_comment 处理注释
handle_decl 处理<!开头的,比如<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
handle_pi 处理形如<?instruction>的东西

时间: 2024-10-12 07:45:12

[转载]python模块学习---HTMLParser(解析HTML文档元素)的相关文章

使用 Python 模块&mdash;&mdash; HTMLParser 解析 HTML 文档元素

这个文档定义了一个 HTMLParser 类作为解析 HTML 文档的基础.HTMLParser 类的实例可以存储并调用方法来处理 HTML 标签和数据.我们一般通过建立一个 HTMLParser 的子类然后覆盖它的方法来实现我们想要的操作.HTMLParser 有很多方法,一般我们只需要覆盖下面几个方法: HTMLParser.handle_starttag(tag, attrs) #遇到一个开始标签时就会执行这个方法 #tag 是遇到的标签,attrs attrs是 (属性,值)元组(tup

用Objective-C HTMLParser解析HTML文档

代码:https://github.com/zootreeves/Objective-C-HMTL-Parser ? 戴维营教育代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 NSString *str = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://vip.astro.sin

转载---Python模块学习optparse 处理命令行参数

参考资料 http://docs.python.org/library/optparse.html 原文地址 http://mrwlwan.wordpress.com/2008/09/25/python%ef%bc%9a-%e4%bd%bf%e7%94%a8-optparse-%e5%a4%84%e7%90% Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强

第7章 文档元素

第 7 章文档元素 学习要点: 1.文档元素总汇 2.文档元素解析 本章主要探讨 HTML5中文档元素,文档元素的主要作用是划分各个不同的内容,让整 个布局清晰明快.让整个布局元素具有语义,进一步替代 div. 一.文档元素总汇 文档元素基本没有什么实际作用效果,主要目的是在页面布局时区分各个主题和概念. 元素名称  说明 h1~h6  表示标题 表示首部  header 表示尾部  footer 表示有意集中在一起的导航元素  nav 表示重要概念或主题  section 表示一段独立的内容 

python 解析html文档模块HTMLPaeser

python中,有三个库可以解析html文本,HTMLParser,sgmllib,htmllib.他们的实现方法不通,但功能差不多.这三个库中 提供解析html的类都是基类,本身并不做具体的工作.他们在发现的元件后(如标签.注释.声名等),会调用相应的函数,这些函数必须重载,因为基类中不作处理. 用Python中自带的HTMLPaeser模块,解析下面的HTMl文件 要求:1.获取到每一个漏洞的名称,CVE号,风险值 2.显示每一个漏洞单独显示,不要堆叠在一起 3.只获取高风险的漏洞 <htm

python 解析docx文档的方法,以及提取插入的文本对象和图片

首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. 3一个插入的文件对象.4 一个图片 这4个部分是我们在docx文档中最常见的几种格式.解析代码如下 import docx def docx_try():     doc=docx.Document(r'E:\py_prj\test.docx')     for p in doc.paragraph

python解析PDF文档

1.安装 pip install pdfminer3k 2.  python读取PDF文档代码分析 PDF格式不是规范格式. 尽管它被叫做"PDF文档", 但并不像word或者html文档.PDF的表现更像一张图片.PDF更像是在一张纸的各个准确的位置上把内容都摆放出来.大部分情况下,没有逻辑结构,比如句子或段落,并且不能自适应页面大小的调整.PDFMiner尝试通过猜测它们的布局来重建它们的结构,但是不保证一定能工作.我知道这样很难看,但是,PDF确实不够规范. 下面这个图片是使用流

python模块学习(2)——re模块

正则表达式并不是python的一部分,正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持的语法通常是不常用的部分.如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了. 下图展示了使用正则表达式进行匹配的流程:  正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符

python模块之HTMLParser抓页面上的所有URL链接

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser抓页面上的所有URL链接 import urllib #MyParser类写法一 ''' from HTMLParser import HTMLParser class MyParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) def handle_starttag(self, tag, a