gpt4 book ai didi

python - 在 get_text() 中用
标签分隔

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:08 24 4
gpt4 key购买 nike

我正在尝试从网站上抓取文本,同时保留其 <br>使用 '\n' 格式化我的输出的标签秒。但是,我找不到一种有效的方法来做到这一点。 (注意:我不能使用 get_text(separator='\n'),因为像 <a> 标签会把它分成尴尬的间距。)

我可能会尝试抓取的示例文本如下所示:

<div class="example">
Lorem ipsum dolor sit amet?
<br>
consectetur adipiscing elit.
<br>
Vivamus nec <a class="someLink" href="example.com">arcu</a>
erat.
<br>
Suspendisse a mauris vestibulum, rhoncus.
<br>
</div>

我知道我可以有一些代码,例如:

def get_stuff(message):
soup = BeautifulSoup(urllib.request.urlopen(url).read(), 'html.parser')
example = soup.find("div", class_="example").get_text()

它会得到很好的文本。但同样,我希望能够使用 <br> 对其进行格式化。标签。我以为soup.find("div", class_="example").get_text(separator="br")可以解决问题,但似乎没有办法使用 <br>作为 get_text() 中的分隔符.

除了围绕 <div> 进行专门编程之外,还有什么办法吗? , <a> ,以及其他可能有标签的东西?

最佳答案

您可以创建一个递归函数,它将返回所有文本,包括 <br>标签。

from bs4 import BeautifulSoup, Tag

def get_text_with_br(tag, result=''):
for x in tag.contents:
if isinstance(x, Tag): # check if content is a tag
if x.name == 'br': # if tag is <br> append it as string
result += str(x)
else: # for any other tag, recurse
result = get_text_with_br(x, result)
else: # if content is NavigableString (string), append
result += x

return result

html = '''
<div class="example">
Lorem ipsum dolor sit amet?
<br>
<a> text inside a_tag</a>
consectetur adipiscing elit.
<br>
Vivamus nec <a class="someLink" href="example.com">arcu</a>
erat.
<br>
Suspendisse a mauris vestibulum, rhoncus.
<br>
</div>'''

soup = BeautifulSoup(html, 'html.parser')
text = get_text_with_br(soup.find('div'))
print(text)

输出:

  Lorem ipsum dolor sit amet?
<br/>
text inside a_tag
consectetur adipiscing elit.
<br/>
Vivamus nec arcu
erat.
<br/>
Suspendisse a mauris vestibulum, rhoncus.
<br/>

关于python - 在 get_text() 中用 <br> 标签分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49649090/

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