簡體   English   中英

我可以刪除“樣式”屬性具有特定值的標簽,然后刪除BeautifulSoup中標簽的所有屬性嗎?

[英]Can I remove tags whose “style” attributes have specific value, then all attributes of tags in BeautifulSoup?

原始的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>

我要做的第一步是刪除所有樣式屬性包括中心text-align的標簽:

<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移至第二個<li>標記,然后使用.decompose()將其從BeautifulSoup對象中刪除。 但是,如果我不知道要刪除的標簽的位置,只知道這些標簽應符合的條件,似乎無法找出這些標簽的確切位置,然后對BeautifulSoup對象進行操作。

您可以使用re包來匹配text-align: center in 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)

OUTPUT:

<ul>
<li>
<p>blahblah</p>
</li>
<li>

</li>
</ul>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM