gpt4 book ai didi

python - 使用 Python 和 BeautifulSoup,仅选择未包含在 中的文本节点

转载 作者:行者123 更新时间:2023-11-28 21:49:48 24 4
gpt4 key购买 nike

我正在尝试解析一些文本,以便我可以 urlize(用标签包装)未格式化的链接。下面是一些示例文本:

text = '<p>This is a <a href="https://google.com">link</a>, this is also a link where the text is the same as the link: <a href="https://google.com">https://google.com</a>, and this is a link too but not formatted: https://google.com</p>'

这是我目前从 here 得到的信息:

from django.utils.html import urlize
from bs4 import BeautifulSoup

...

def urlize_html(text):

soup = BeautifulSoup(text, "html.parser")

textNodes = soup.findAll(text=True)
for textNode in textNodes:
urlizedText = urlize(textNode)
textNode.replaceWith(urlizedText)

return = str(soup)

但这也会捕获示例中的中间链接,导致它被双重包裹在 <a> 中标签。结果是这样的:

<p>This is a <a href="https://djangosnippets.org/snippets/2072/" target="_blank">link</a>, this is also a link where the test is the same as the link: <a href="https://djangosnippets.org/snippets/2072/" target="_blank">&lt;a href="https://djangosnippets.org/snippets/2072/"&gt;https://djangosnippets.org/snippets/2072/&lt;/a&gt;</a>, and this is a link too but not formatted: &lt;a href="https://djangosnippets.org/snippets/2072/"&gt;https://djangosnippets.org/snippets/2072/&lt;/a&gt;</p>

我能对 textNodes = soup.findAll(text=True) 做什么这样它只包含尚未包含在 <a> 中的文本节点标签?

最佳答案

Textnodes 保留它们的 parent 引用,所以你可以只测试 a 标签:

for textNode in textNodes:
if textNode.parent and getattr(textNode.parent, 'name') == 'a':
continue # skip links
urlizedText = urlize(textNode)
textNode.replaceWith(urlizedText)

关于python - 使用 Python 和 BeautifulSoup,仅选择未包含在 <a> 中的文本节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32926395/

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