Python 和 HTMLParser.handle_data() - 如何从标签中获取数据?

4 投票
3 回答
9879 浏览
提问于 2025-04-17 08:17

我正在尝试用Python的HTMLParser来解析一个网页。我想获取某个标签的内容,但我不太确定该怎么做。这是我目前写的代码:

import urllib.request
from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_data(self, data):
        print("Encountered   some data:", data)


url = "website"
page = urllib.request.urlopen(url).read()

parser = MyHTMLParser(strict=False)
parser.feed(str(page))

如果我理解得没错的话,我可以使用handle_data()这个函数来获取标签之间的数据。那么,我该怎么指定要获取哪个标签的数据呢?我又该如何获取这些数据呢?

3 个回答

0

我没时间把这个整理得更好,但我通常是这样做的:

        class HTMLParse(HTMLParser.HTMLParser):
            def handle_starttag(self, tag, attr):
                if tag.lower() == "a":
                    for item in attr:
                        #print item
                        if item[0].lower() == "href":
                            path = urlparse.urlparse(item[1]).path
                            ext = os.path.splitext(path)[1]
                            if ext.lower() in (".jpeg", ".jpg", ".png",
                                               ".bmp"):
                                print "Found: "+ item[1]
1

在编程中,我们经常会遇到一些问题,尤其是在使用特定的工具或库时。比如,有时候我们想要实现某个功能,但不知道该怎么做。这时候,很多人会选择去StackOverflow这样的论坛寻求帮助。在这些论坛上,其他程序员会分享他们的经验和解决方案。

这些讨论通常会涉及到代码示例、错误信息的分析,以及如何解决这些问题的具体步骤。通过阅读这些内容,初学者可以更好地理解编程的思路和方法,逐步提高自己的技能。

总之,StackOverflow是一个非常有用的资源,特别是当你在编程过程中遇到困难时,那里有很多人愿意分享他们的知识和经验。

class HTMLParse(HTMLParser.HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag == 'h2':
            self.recordh2 = True
    def handle_endtag(self, tag, attrs):
        if tag == 'h2':
            self.recordh2 = False
    def handle_data(self, data):
        if self.recordh2:
            # do your work here
0
html_code = urllib2.urlopen("xxx")
html_code_list = html_code.readlines()
data = ""
for line in html_code_list:
    line = line.strip()

    if line.startswith("<h2"):
       data = data+line

hp = MyHTMLParser()
hp.feed(data)
hp.close()

这样你就可以从h2标签中提取数据了,希望这能帮到你。

撰写回答