Python中HTMLParser模块处理多个HTML文档的实例
HTMLParser模块是Python的内置模块,用于解析HTML文档。它提供了一个解析器类HTMLParser,可以根据HTML文档的结构和标记来处理文档中的内容。
在处理多个HTML文档时,我们可以通过继承HTMLParse来自定义一个解析器类,然后按照需要重写其中的方法。
下面是一个处理多个HTML文档的示例,我们将使用HTMLParser模块来解析HTML文档,并提取出文档中的标题、链接和图片。
from html.parser import HTMLParser
from urllib.request import urlopen
# 自定义的解析器类
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.is_title = False
self.is_link = False
self.is_image = False
def handle_starttag(self, tag, attrs):
# 处理开始标记
if tag == 'title':
self.is_title = True
elif tag == 'a':
for attr in attrs:
if attr[0] == 'href':
print('Link:', attr[1])
elif tag == 'img':
for attr in attrs:
if attr[0] == 'src':
print('Image:', attr[1])
def handle_data(self, data):
# 处理文本内容
if self.is_title:
print('Title:', data)
self.is_title = False
# 处理多个HTML文档
def handle_multiple_html(urls):
for url in urls:
response = urlopen(url) # 打开URL
html = response.read().decode('utf-8') # 读取HTML内容
parser = MyHTMLParser() # 创建解析器对象
parser.feed(html) # 解析HTML文档
parser.close() # 关闭解析器
# 测试代码
if __name__ == '__main__':
urls = ['http://example.com', 'http://example.org']
handle_multiple_html(urls)
在上面的例子中,首先自定义了一个类MyHTMLParser,继承自HTMLParser。在这个类中,我们重写了handle_starttag方法和handle_data方法,分别用于处理开始标记和文本内容。
在handle_starttag方法中,我们判断如果是<title>标记,则将is_title标记设置为True,表示接下来要处理标题内容;如果是<a>标记,则遍历其属性,找到href属性,并打印出链接;如果是<img>标记,则遍历其属性,找到src属性,并打印出图片链接。
在handle_data方法中,我们判断如果is_title标记为True,则打印出标题内容,并将is_title标记设置为False,表示标题内容已经处理完毕。
然后,在handle_multiple_html方法中,我们循环处理多个HTML文档。首先使用urlopen函数打开URL,获取HTML内容,然后创建MyHTMLParser的实例对象parser,对HTML内容进行解析,最后关闭解析器。
最后,我们在测试代码中定义了两个URL,然后调用handle_multiple_html方法,传入这两个URL进行处理。
以上是Python中使用HTMLParser模块处理多个HTML文档的例子。通过自定义的解析器类,我们可以根据需要提取出HTML文档中的内容,并进行相应的处理。
