如何查找未被特定标记包围的标记并用标记包装它们

时间:2017-05-26 11:32:46

标签: python html beautifulsoup

使用Beautifulsoup,我想找<a>未被<p>括起来并用<p>括起来,但我不知道怎么做

<p><a href="example1.com">example1.com</a></p>
<p><a href="example2.com">example2.com</a></p>
<a href="example3.com">example3.com</a>
<p><a href="example3.com">example3.com</a></p>

我想改变上面的html

<p><a href="example1.com">example1.com</a></p>
<p><a href="example2.com">example2.com</a></p>
<p><a href="example3.com">example3.com</a></p> <-here
<p><a href="example3.com">example3.com</a></p>

3 个答案:

答案 0 :(得分:2)

您需要使用css selectorwrap使用p标记

选择这些锚点
In [2]: from bs4 import BeautifulSoup as BS

In [3]: html = """<p><a href="example1.com">example1.com</a></p>
   ...: <p><a href="example2.com">example2.com</a></p>
   ...: <a href="example3.com">example3.com</a>
   ...: <p><a href="example3.com">example3.com</a></p>"""

In [4]: soup = BS(html, "html.parser")

In [5]: for a in soup.select("p ~ a"):
   ...:     a.wrap(soup.new_tag("p"))
   ...:     

In [6]: soup
Out[6]: 
<p><a href="example1.com">example1.com</a></p>
<p><a href="example2.com">example2.com</a></p>
<p><a href="example3.com">example3.com</a></p>
<p><a href="example3.com">example3.com</a></p>

答案 1 :(得分:1)

wp_insert_post()

答案 2 :(得分:0)

试试这个:

from bs4 import BeautifulSoup

    data = """
    <p><a href="example1.com">example1.com</a></p>
    <p><a href="example2.com">example2.com</a></p>
    <a href="example3.com">example3.com</a>
    <p><a href="example3.com">example3.com</a></p>
    """


    soup = BeautifulSoup(data, 'html.parser')
    for a in soup('a'):  # shortcut for soup.find_all('p')

        if a.parent.name != 'p' :
            a.wrap(soup.new_tag("p"))
    print soup