gpt4 book ai didi

python - 使用htmlparser python获取标签下的html

转载 作者:太空狗 更新时间:2023-10-30 02:12:49 24 4
gpt4 key购买 nike

我想在标签下获取整个 html 并使用 HTMLParser。我目前能够获取标签之间的数据,下面是我的代码

class LinksParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.recording = 0
self.data = ''

def handle_starttag(self, tag, attributes):
if tag != 'span':
return
if self.recording:
self.recording += 1
return
for name, value in attributes:
if name == 'itemprop' and value == 'description':
break
else:
return
self.recording = 1

def handle_endtag(self, tag):
if tag == 'span' and self.recording:
self.recording -= 1

def handle_data(self, data):
if self.recording:
self.data += data

例如,我还想要输入中的 html 标签

<span itemprop="description">
<h1>My First Heading</h1>
<p>My first <br/><br/>paragraph.</p>
</span>

当作为输入提供时,只会给我没有标签的数据。有什么方法可以在标签之间获取整个 html 吗?

最佳答案

可以使用 xml.etree.ElementTree.TreeBuilder 利用 etree API 查找/操作 <span>元素:

import sys
from HTMLParser import HTMLParser
from xml.etree import cElementTree as etree

class LinksParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.tb = etree.TreeBuilder()

def handle_starttag(self, tag, attributes):
self.tb.start(tag, dict(attributes))

def handle_endtag(self, tag):
self.tb.end(tag)

def handle_data(self, data):
self.tb.data(data)

def close(self):
HTMLParser.close(self)
return self.tb.close()

parser = LinksParser()
parser.feed(sys.stdin.read())
root = parser.close()
span = root.find(".//span[@itemprop='description']")
etree.ElementTree(span).write(sys.stdout)

Output

<span itemprop="description">
<h1>My First Heading</h1>
<p>My first <br /><br />paragraph.</p>
</span>

在没有父级(root)的情况下打印 <span>标签:

sys.stdout.write(span.text)
for child in span:
sys.stdout.write(etree.tostring(child)) # add encoding="unicode" on Python 3

关于python - 使用htmlparser python获取标签下的html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13334044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com