该模块定义一个HTMLParser类,解析HTML(超文本标记语言)和HTML中的文本格式的文件。不同于htmllib中的解析器,该解析器不基于sgmllib中的SGML解析器。
class HTMLParser()
HTMLParser类的实例化不需要参数。
当标记开始和结束时,HTMLParser实例被HTML数据使用,同时调用处理函数。HTMLParser类由用户提供一个期望的行为时,意味着被重载。
不同于htmllib中的解析器,这个解析器不检查结尾的标记是否匹配开始的标记,或为通过关闭一个外部元素隐式关闭的元素调用结束标记处理器。
也定义一个异常:
exception HTMLParseError
当解析遇到一个错误时,HTMLParser类挂起一个异常。这个异常提供三个属性:msg是一个简短的解析错误的信息,lineno是被检测的不完善结构的行数,offset是结构开始时行内的字符数。
HTMLParser实例有下列方法:
reset()
重新设置实例。丢弃所有未处理的数据。在实例化时被隐式调用。
feed(data)
给解析器提供一些文本。它包含完整的元素时被处理;不完整的数据被缓冲直到更多的数据被导入或close()被调用时。
close()
如果所有的缓冲数据紧跟一个文件结束标记时,强制处理所有的缓冲数据。通过一个在输入结尾定义附加处理的导出类,该方法可以被重定义,但是应该一直调用HTMLParser的基础类方法close()。
getpos()
返回当前的行数和偏移。
get_starttag_text()
返回当前打开的开始标记的文本。对于结构化处理,通常不需要,但是部署HTML时或用细小的改变重新生成输入时可能是有用的(属性之间保留空格,等等)。
handle_starttag(tag, attrs)
该方法被用来处理一个标记的开始。计划通过一个导出类重载;这个基类什么也不实现。
tag参数是转换成小写字母的标记的名称。attrs参数是成对的(name,value)列表,包括发现在标记的<>中的属性。name将被转换成小些字母,并且在value中双引号和反斜线都已经被解释。例如,标记<A HREF=http://www.cwi.nl>,如同调用“handle_starttag(‘a’,[(‘href’,’http://www.cwi.nl’)])”。
handle_startendtag(tag, attrs)
类似于handle_starttat(),但是当解析器遇到一个XHTML风格的空标签(<a…/>)时调用。该方法通过子类可以被重载,子类需要这个特殊的词汇信息;缺省的实现是简单的调用handle_starttag()和handle_endtag()。
handle_endtag(tag)
该方法被用来处理元素的结束标记。它被计划通过一个导出类重载;该基类未实现任何事情。tag参数是该标记转换成小写字母的名称。
handle_data(data)
该方法用来处理任意数据。计划通过一个导出类被重载;该基类什么都不做。
handle_charref(name)
该方法用来处理”&#ref;”格式的字符引用。计划通过一个导出类被重载;该基类什么都不做。
handle_entityref(name)
该方法用来处理”&name;”格式的实体引用,name通常是一个普通的实体引用。计划通过一个导出类被重载;该基类什么都不做。
handle_comment(data)
当遇到注释时该方法被调用。comment参数是一个包含”--”和”--”定义符之间文本的字符串,但是不包括定义符本身。例如注释”<!—text-->”将促使该方法使用参数’text’被调用。计划通过一个导出类被重载;该基类什么都不做。
handle_decl(decl)
当解析器读取一个SGML声明时该方法被调用。decl参数将是<!...>标记中声明的全部内容。计划通过一个导出类被重载;该基类什么都不做。
handle_pi(data)
当遇到一个处理指令时调用该方法。data参数包含全部处理指令。例如,处理指令<?proc color=’red’>,该方法作为handle_pi(“proc color=’red’”)被调用。。计划通过一个导出类被重载;该基类什么都不做。
注意:HTMLParser类使用SGML语法规则处理指令。XHTML指令使用”?”结尾将导致”?”被包含在data中。
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.links = []
def handle_starttag(self, tag, attrs):
#print "Encountered the beginning of a %s tag" % tag
if tag == "a":
if len(attrs) == 0: pass
else:
for (variable, value) in attrs:
if variable == "href":
self.links.append(value)
if __name__ == "__main__":
html_code = """
<a href="www.google.com"> google.com</a>
"""
hp = MyHTMLParser()
hp.feed(html_code)
hp.close()
print(hp.links)
输出为:
['www.google.com']
如果想抽取图形链接
<img src='http://www.google.com/intl/zh-CN_ALL/images/logo.gif' />
就要重定义 handle_startendtag( tag, attrs) 函数
分享到:
相关推荐
在描述中提到的“org.htmlparser.Node”和其他的.class文件,这些都是HTMLParser库的核心组成部分。`org.htmlparser.Node` 是HTMLParser中的一个关键接口,它代表HTML文档中的一个节点,可以是元素(Element)、注释...
`htmlparser.jar`的主要功能包括: 1. **HTML解析**:它可以将HTML源代码转换成一个解析树,这个树状结构代表了HTML文档的各个元素和它们之间的关系。 2. **节点操作**:一旦解析完成,开发者可以遍历这个解析树,对...
HTMLParser.jar包是一款专门用于解析HTML网页的框架,它的特点是运行速度快且体积小巧,因此在处理HTML解析任务时,能够高效地完成工作。这个框架主要适用于那些需要从HTML文档中提取数据、分析网页结构或者进行自动...
org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans.BeanyBaby.class org.htmlparser.beans.FilterBean.class org.htmlparser.beans.HTMLLinkBean.class org....
HTMLParser.jar通过改进源码,增强了对编码的检测和转换能力,确保在解析过程中能够准确识别并转换编码。 2. **编码声明不一致**:有时,HTML文档中声明的编码与实际使用的编码不一致,这也会引发乱码。HTMLParser....
基于java的开发源码-HTML文档解析器 HTMLParser.zip 基于java的开发源码-HTML文档解析器 HTMLParser.zip 基于java的开发源码-HTML文档解析器 HTMLParser.zip 基于java的开发源码-HTML文档解析器 HTMLParser.zip 基于...
【标题】"跨平台的Html解析代码_武稀松_HtmlParser.rar" 涉及的是一个关于跨平台HTML解析的编程项目,由开发者武稀松创建。这个项目的核心是HtmlParser,它可能是一个用Delphi编写的库或框架,旨在帮助程序员在不同...
《Winista.HTMLParser.dll:网页解析的开源利器》 在信息技术高速发展的今天,网页数据的抓取和分析已经成为一项至关重要的任务。对于开发者而言,能够高效地解析HTML文档,从中提取所需信息,无疑是一个强大的工具...
`htmlparser.dll`是这个库的动态链接库文件,它包含了编译好的类和方法,可以直接在C#项目中引用以使用HTMLParser的功能。在C#项目中,我们可以通过添加对dll的引用来调用库中的方法,比如解析HTML字符串、查找特定...
1. **HTMLParser.jar**: HTMLParser 是一个开源的 Java 解析器,它可以解析 HTML 和 XML 文档。它不仅支持标准的 HTML 元素,还能够处理非标准的、不规范的 HTML 代码,这在处理来自不同网站的混乱 HTML 时特别...
这个压缩包"htmlparser.jar.rar"包含了与HTMLParser相关的几个组件,但遗憾的是,它并没有提供源代码或文档,这可能会对理解和使用这个库造成一定的困难。让我们详细了解一下这些文件及其可能的作用。 1. **log4j-...
import org.htmlparser.util.NodeIterator; public class HtmlParserExample { public static void main(String[] args) throws Exception { Parser parser = new Parser("http://example.com"); NodeList links...
HTMLParser 是用来解析html网页用的java开发包,里面... 如果用开发工具开发,需要导入htmllexer.jar与htmlparser.jar两个包,这两个包在HTMLParser-2.0-SNAPSHOT\lib下面,源码在htmlparser\src\org\htmlparser下面。
编译过的HtmlParser.dll文件,可直接使用
在提供的信息中,我们关注的是三个Java库:`Commons-httpClient3.1.jar`, `htmllexer.jar`, 和 `htmlparser.jar`。这些库在构建简易爬虫时扮演着关键角色。下面我们将详细探讨这三个库的功能、用途以及如何在实际...
`htmllexer.jar` 和 `htmlparser.jar` 库应该已经考虑了这些问题,提供了一定程度的健壮性和容错性。 总的来说,这两个jar文件为Java开发者提供了一个强大的工具集,使得处理HTML文档变得更加简单和高效,无论是在...
7. **跨平台支持**:由于基于.NET框架,DI.HtmlParser 可以在多个平台上运行,包括Windows、Linux和Mac OS,满足不同开发环境的需求。 在实际应用中,你可以使用DI.HtmlParser 解析网页,获取产品信息、新闻文章,...
import org.htmlparser.util.NodeIterator; import org.htmlparser.nodes.TagNode; public class HtmlParserExample { public static void main(String[] args) throws Exception { Parser parser = new Parser(...
Htmlparser.chm文件很可能是一个帮助文档,包含了关于Winista.Htmlparser库的详细说明、API参考、示例代码和使用指南。通常,CHM(Compiled Help Manual)文件是微软编译的帮助文件格式,用户可以通过它来查找库的...
import org.htmlparser.util.NodeIterator; import org.htmlparser.nodes.TagNode; public class HtmlParserDemo { public static void main(String[] args) { try { Parser parser = new Parser("<html><body>...