BeautifulSoup:在遍历 Tag.strings 时编辑 Tag.strings
BeautifulSoup: edit Tag.strings while iterating over Tag.strings
有很多关于编辑标签的 string
或 strings
属性的问题,但是我可以看到的已接受答案中的 none 解决了我遇到的问题.
如果您迭代 Tag.strings
生成器,只要您使用 .replace_with()
编辑一个项目,编辑就会成功,但是生成器会立即退出,您无法继续迭代其余部分Tag.strings
中的项目。以下代码对此进行了演示:
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>This <a href="../t.html">is my</a> example.</p>')
for s in soup.strings:
s.replace_with(s.replace(' ', ''))
print(soup)
# <html><body><p>This<a href="../t.html">is my</a> example.</p></body></html>
同时迭代和编辑 Tag.strings
的最佳方法是什么?
此(低效)解决方案使用 while
循环来检查是否所有需要更改的内容都已更改:
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>This <a href="../t.html">is my</a> example.</p>')
while any(' ' in s for s in soup.strings):
for s in soup.strings:
s.replace_with(s.replace(' ', ''))
print(soup)
# <html><body><p>This<a href="../t.html">ismy</a>example.</p></body></html>
希望有更多 efficient/elegant 解决方案。
有很多关于编辑标签的 string
或 strings
属性的问题,但是我可以看到的已接受答案中的 none 解决了我遇到的问题.
如果您迭代 Tag.strings
生成器,只要您使用 .replace_with()
编辑一个项目,编辑就会成功,但是生成器会立即退出,您无法继续迭代其余部分Tag.strings
中的项目。以下代码对此进行了演示:
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>This <a href="../t.html">is my</a> example.</p>')
for s in soup.strings:
s.replace_with(s.replace(' ', ''))
print(soup)
# <html><body><p>This<a href="../t.html">is my</a> example.</p></body></html>
同时迭代和编辑 Tag.strings
的最佳方法是什么?
此(低效)解决方案使用 while
循环来检查是否所有需要更改的内容都已更改:
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>This <a href="../t.html">is my</a> example.</p>')
while any(' ' in s for s in soup.strings):
for s in soup.strings:
s.replace_with(s.replace(' ', ''))
print(soup)
# <html><body><p>This<a href="../t.html">ismy</a>example.</p></body></html>
希望有更多 efficient/elegant 解决方案。