利用HTMLParser.HTMLParser从HTML文件中提取链接
发布时间:2024-01-03 08:17:59
HTMLParser是Python内置模块,用于解析HTML文件。可以通过继承HTMLParser类,重写其中的方法来实现对HTML文件的解析,并提取链接。
下面是一个简单的例子,展示了如何使用HTMLParser从HTML文件中提取链接:
from html.parser import HTMLParser
from urllib.parse import urlparse
class LinkExtractor(HTMLParser):
def __init__(self):
super().__init__()
self.links = []
def handle_starttag(self, tag, attrs):
if tag == "a":
for attr in attrs:
if attr[0] == "href":
url = attr[1]
parsed_url = urlparse(url)
if parsed_url.scheme and parsed_url.netloc: # 确认链接是绝对地址
self.links.append(url)
def get_links(self):
return self.links
# 读取HTML文件内容
with open("example.html") as file:
html_content = file.read()
# 创建LinkExtractor对象并解析HTML
link_extractor = LinkExtractor()
link_extractor.feed(html_content)
# 获取提取的链接列表
links = link_extractor.get_links()
for link in links:
print(link)
在这个例子中,我们首先导入了HTMLParser和urlparse两个模块。然后定义了一个LinkExtractor类,继承自HTMLParser。
在LinkExtractor中,我们重写了handle_starttag方法。当解析器遇到HTML的开始标签时,会调用此方法。我们在这里判断标签是否是"a"标签,如果是,则遍历标签的属性,找到其中的href属性。如果href属性的值是一个绝对地址(包含协议和域名),则将其添加到链接列表中。
LinkExtractor类还定义了一个get_links方法,用于获取提取的链接列表。
接下来,我们读取HTML文件的内容,并创建LinkExtractor对象。然后调用feed方法,将HTML内容传递给解析器进行解析。
最后,我们通过调用get_links方法获取提取的链接列表,并打印每个链接。
需要注意的是,HTMLParser是一个基础的HTML解析器,它不会处理HTML中的特殊情况,如嵌套标签等。如果需要处理更复杂的HTML文件,可以考虑使用其他强大的HTML解析库,如BeautifulSoup。
