gpt4 book ai didi

python - 使用 BeautifulSoup 调整 DOM 树中的所有文本

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

我正在尝试将 HTML 文件中的所有(用户可见的)文本大写。这是显而易见的事情:

from bs4 import BeautifulSoup

def upcaseAll(str):
soup = BeautifulSoup(str)
for tag in soup.find_all(True):
for s in tag.strings:
s.replace_with(unicode(s).upper())
return unicode(soup)

崩溃了:

File "/Users/malvolio/flip.py", line 23, in upcaseAll
for s in tag.strings:
File "/Library/Python/2.7/site-packages/bs4/element.py", line 827, in _all_strings
for descendant in self.descendants:
File "/Library/Python/2.7/site-packages/bs4/element.py", line 1198, in descendants
current = current.next_element
AttributeError: 'NoneType' object has no attribute 'next_element'

我能想到的所有变体都以同样的方式崩溃。 BS4 似乎不喜欢我替换了很多 NavigableStrings。我该怎么做?

最佳答案

你不应该使用 str 作为函数参数,因为这是 python 内置的影子名称。

您还应该能够通过使用 prettifyformatter 来转换可见元素,如下所示:

...
return soup.prettify(formatter=lambda x: unicode(x).upper())

我已经测试过了,它可以工作:

from bs4 import BeautifulSoup

import requests

r = requests.get('http://www.stackoverflow.com')

soup = BeautifulSoup(r.content)

print soup.prettify(formatter=lambda x: unicode(x).upper())[:200]
<!DOCTYPE html>
<html>
<head>
<title>
STACK OVERFLOW
</title>
<link href="//CDN.SSTATIC.NET/STACKOVERFLOW/IMG/FAVICON.ICO?V=00A326F96F68" rel="SHORTCUT ICON"/>
<link href="//CDN.SSTATIC.NE
...

您可以阅读 OUTPUT FORMATTER获取更多详细信息。

希望这对您有所帮助。

关于python - 使用 BeautifulSoup 调整 DOM 树中的所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28890378/

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