原始的BeautifulSoup对象如下所示:
<p style="padding-left: 140pt;text-indent: 0pt;line-height: 13pt;text-align: center;">blahblah</p>
<ul>
<li style="padding-left: 11pt;text-indent: 0pt;line-height: 14pt;text-align: left;">
<p style="display: inline;">blahblah</p>
</li>
<li style="padding-left: 11pt;text-indent: 0pt;line-height: 14pt;text-align: left;">
<p style="text-indent: 0pt;text-align: center;">blahblah</p>
</li>
</ul>
我要做的第一步是删除所有样式属性包括居中文本对齐方式的标签:
<ul>
<li style="padding-left: 11pt;text-indent: 0pt;line-height: 14pt;text-align: left;">
<p style="display: inline;">blahblah</p>
</li>
<li style="padding-left: 11pt;text-indent: 0pt;line-height: 14pt;text-align: left;">
</li>
</ul>
然后第二步是删除所有样式属性:
<ul>
<li>
<p>blahblah</p>
</li>
<li>
</li>
</ul>
也许上面的例子有点奇怪。但是问题是:尽管可以很容易地在BeautifulSoup对象中找到一个或多个标签,但我们能找到一种简单的方法来操作BeautifulSoup对象本身吗?如果知道标签的位置,则可以轻松地将其从BeautifulSoup对象中删除。例如,如果要删除第二个<li>
标记,可以使用soup.ul.li
指向第一个<li>
标记,然后使用.next_sibling
移至第二个标记,然后使用.decompose()
将其从BeautifulSoup对象中删除。但是,如果我不知道要删除的标签的位置,只是知道这些标签应符合的条件,似乎就无法找出这些标签的确切位置,然后对BeautifulSoup对象进行操作。
答案 0 :(得分:0)
您可以使用re
包来匹配text-align: center
属性中的style
。
然后,您只需检查style
属性的存在即可。
代码:
from bs4 import BeautifulSoup as soup
import requests
import re
html = """<p style="padding-left: 140pt;text-indent: 0pt;line-height: 13pt;text-align: center;">blahblah</p>
<ul>
<li style="padding-left: 11pt;text-indent: 0pt;line-height: 14pt;text-align: left;">
<p style="display: inline;">blahblah</p>
</li>
<li style="padding-left: 11pt;text-indent: 0pt;line-height: 14pt;text-align: left;">
<p style="text-indent: 0pt;text-align: center;">blahblah</p>
</li>
</ul>"""
page = soup(html, 'html.parser')
style_center = page.find_all(style=re.compile('text-align: center'))
for style in style_center:
style.decompose()
for tag in page.find_all():
if 'style' in tag.attrs:
del tag.attrs['style']
print(page)
输出:
<ul>
<li>
<p>blahblah</p>
</li>
<li>
</li>
</ul>