欢迎访问宙启技术站
智能推送

利用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。