提问人:Beginner 提问时间:1/9/2023 最后编辑:Michael M.Beginner 更新时间:1/9/2023 访问量:109
HTML 解析器查找标签信息
HTML parser find tag info
问:
我有一个项目,其中使用 .我从未使用过这个解析器,所以我阅读了文档并找到了两个有用的方法,我可以重写以从站点中提取信息:和 .但是我不明白如何找到所需的标签信息并将其传递给打印信息。HTMLParser()
handle_starttag
handle_data
handle_data
我需要从页面上的所有 span 标签中获取价格
<span itemprop="price" content="590">590 dollars</span>
我如何得到这个?
答:
1赞
Michael M.
1/9/2023
#1
如果每个价格标签都有属性,并且美元金额在属性中,那么你可以像这样做:<span>
itemprop
"price"
content
hanlde_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']
评论