【问题标题】:How can I remove all the elements in python html text where tag exists as a sibling element如何删除标记作为兄弟元素存在的python html文本中的所有元素
【发布时间】:2019-03-28 08:34:07
【问题描述】:

我需要在python中解析脏的html字符串,我需要消除所有旁边有兄弟标签的文本。

比如我需要转换这个html。

    <p class="se_textarea">
        x3C!-- SE3-TEXT { --&gt;
    <span>
        <b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
        nnnnnnn
        <br>
    </span>
    <span>
        <b>어느곳에 설치 하셔도 예쁜..&nbsp;</b>
        <br>
    </span>
    </p>

到这个 html。

    <p class="se_textarea">
    <span>
        <b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
        <br>
    </span>
    <span>
        <b>어느곳에 설치 하셔도 예쁜..&nbsp;</b>
       <br>
    </span>
    </p>

由于x3C!-- SE3-TEXT { --&amp;gt;&lt;span&gt; 的兄弟,而nnnnn 是&lt;b&gt;tag 的兄弟,我需要删除此文本,而식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등&lt;b&gt; 标记中的唯一文本,我不需要去掉它。

【问题讨论】:

  • 要删除的文本旁边的兄弟标签是什么?
  • @Maaz 这取决于它可能是 div span 或 p
  • 这不是那么容易理解的。在您的示例中,您为什么要删除 nnnnnnn ?因为下一个标签是&lt;br&gt;?
  • @Maaz 因为我需要显示那些 html 而 nnnnn 是我不需要的脏数据
  • 是的,但是按照逻辑方法,您是如何找到它的?我的意思是,为什么是 nnnnnnn 而不是 식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등

标签: python regex beautifulsoup


【解决方案1】:

Whelp,这是非常具体的部分原因,因为您实际上只提供了一个示例,所以我不确定会出现什么样的标签,所以您有 2 个选项。

确实,正则表达式通常不是 html 的最佳选择,但我希望这会有所帮助。 BeautifulSoup 或 lxml 最终可能会更好。

使用 re.sub(对于 Python3),如果格式相对一致,您可以使用距离,所以在这里我说替换任何不以 &lt; 开头的文本,如果它前面有 7 或更多空格

>>> import re



>>> string = '''<p class="se_textarea">
        <span>
            <b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
            nnnnnnn
            <br>
        </span>
        <span>
            <b>어느곳에 설치 하셔도 예쁜..&nbsp;</b>
           <br>
        </span>
        </p>'''



>>> print(re.sub('(?m)\n[\ ]{7,}(?!<)[\S]+(?=\n|$)', '', string))


    #OUTPUT
    <p class="se_textarea">
    <span>
        <b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
        <br>
    </span>
    <span>
        <b>어느곳에 설치 하셔도 예쁜..&nbsp;</b>
        <br>
    </span>
    </p>

.

或者您可以使用特定的正则表达式并在必要时替换标签名称

>>> import re



>>> string = '''<p class="se_textarea">
        <span>
            <b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
            nnnnnnn
            <br>
        </span>
        <span>
            <b>어느곳에 설치 하셔도 예쁜..&nbsp;</b>
           <br>
        </span>
        </p>'''



>>> print(re.sub(r'(<span>[\S\s]*?<[\S\s]*?>[\S\ ]*?</[\S\s]*?>[\s]*?)([\S\s]*?)(\n[\ ]+<)', r'\1\3', string))


    #OUTPUT
    <p class="se_textarea">
    <span>
        <b>식탁등/카페조명/매장/포인트조명/pc방/티 테이블 등등</b>
        <br>
    </span>
    <span>
        <b>어느곳에 설치 하셔도 예쁜..&nbsp;</b>
        <br>
    </span>
    </p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-27
    • 2020-07-11
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2015-01-14
    • 2016-08-26
    • 2018-12-25
    相关资源
    最近更新 更多