HTML 解析器查找标签信息

HTML parser find tag info

提问人:Beginner 提问时间:1/9/2023 最后编辑:Michael M.Beginner 更新时间:1/9/2023 访问量:109

问:

我有一个项目,其中使用 .我从未使用过这个解析器,所以我阅读了文档并找到了两个有用的方法,我可以重写以从站点中提取信息:和 .但是我不明白如何找到所需的标签信息并将其传递给打印信息。HTMLParser()handle_starttaghandle_datahandle_data

我需要从页面上的所有 span 标签中获取价格

<span itemprop="price" content="590">590 dollars</span>

我如何得到这个?

python html -解析

评论


答:

1赞 Michael M. 1/9/2023 #1

如果每个价格标签都有属性,并且美元金额在属性中,那么你可以像这样做:<span>itemprop"price"contenthanlde_starttag

from html.parser import HTMLParser


class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        attrsDict = dict(attrs)
        if tag == 'span' and attrsDict['itemprop'] == 'price':
            price = attrsDict['content']
            print(price)
            # do something else with `price` here


# Example test cases
parser = MyHTMLParser()
parser.feed("""
<span itemprop="price" content="590">590 dollars</span>
<span itemprop="price" content="430">430 dollars</span>
<span itemprop="price" content="684">684 dollars</span>
            """)
1赞 Andrej Kesely 1/9/2023 #2

此示例将初始化 custom 并获取标记之间的文本(使用):HTMLParser<span>handle_data

from html.parser import HTMLParser


class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self._price_tag = None
        self.prices = []


    def handle_starttag(self, tag, attrs):
        if tag == "span" and ('itemprop', 'price') in attrs:
            self._price_tag = tag

    def handle_endtag(self, tag):
        if tag == self._price_tag:
            self._price_tag = None

    def handle_data(self, data):
        if self._price_tag:
            self.prices.append(data)



parser = MyHTMLParser()
parser.feed(r"""\
<html>
    <span itemprop="price" content="570">570 dollars</span>
    <span itemprop="price" content="590">590 dollars</span>
</html>
"""
)

print(parser.prices)

指纹:

['570 dollars', '590 dollars']