Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python函数包装html_Python_Html_Parsing - Fatal编程技术网

用python函数包装html

用python函数包装html,python,html,parsing,Python,Html,Parsing,我希望能够根据div的id对其进行包装。例如,给定以下HTML: <body> <div id="info"> <div id="a1"> </div> <div id="a2"> <div id="description"> </div> <div id="links">

我希望能够根据div的id对其进行包装。例如,给定以下HTML:

<body>
    <div id="info">
        <div id="a1">
        </div>
        <div id="a2">
            <div id="description">
            </div>
            <div id="links">
                <a href="http://example.com">link</a>
            </div>
        </div>
    </div>
</body>
<body>
    <div id="info">
        <div id="a1">
        </div>
        <div id="wrapped">
            <div id="a2">
                <div id="description">
                </div>
                <div id="links">
                    <a href="http://example.com">link</a>
                </div>
            </div>
        </div>
    </div>
</body>
将返回以下HTML:

<body>
    <div id="info">
        <div id="a1">
        </div>
        <div id="a2">
            <div id="description">
            </div>
            <div id="links">
                <a href="http://example.com">link</a>
            </div>
        </div>
    </div>
</body>
<body>
    <div id="info">
        <div id="a1">
        </div>
        <div id="wrapped">
            <div id="a2">
                <div id="description">
                </div>
                <div id="links">
                    <a href="http://example.com">link</a>
                </div>
            </div>
        </div>
    </div>
</body>


我研究了一些XML解析器和Python HTMLParser,但没有发现任何东西能够让我不仅获取特定标记中的所有内容,而且能够附加字符串并轻松编辑文档。如果没有,那么什么是一个很好的方法呢?

我推荐
BeautifulSoup
虽然它会带来一些依赖性,但也会带来很多便利。以下代码可以实现
包装的目标:

    from bs4 import BeautifulSoup
    data = '''<body>
                <div id="info">
                  <div id="a1">
                  </div>
                  <div id="a2">
                    <div id="description">
                    </div>
                    <div id="links">
                      <a href="http://example.com">link</a>
                    </div>
                  </div>
                </div>
              </body>'''
    soup = BeautifulSoup(data)
    div = soup.find('div', attrs={'id': 'a2'})
    div.wrap(soup.new_tag('div', id='wrapper'))
从美化组导入美化组
#div1将用div2包裹
def包裹(文件,1分区id,2分区id)
池=美化组(文档)
对于pool.findAll('div',attrs={id':div1\u id})中的div:
div.replacetwith(“”+div.prettify()+“”)
返回池。美化()
包装(文件,'a2','wrapped')

你试过
BeautifulSoup
吗?是的,BeautifulSoup rocks!我不希望使用BeautifulSoup来实现这一点,因为这只是我正在编写的模块中的一个简单的事情,我不想导入那么大的内容,我甚至不知道如何在BeautifulSoup中实现这一点,但如果真的没有其他方法,我会检查它
from BeautifulSoup import BeautifulSoup

#div1 is to be wrapped with div2
def wrap(doc,div1_id,div2_id)
    pool = BeautifulSoup(doc)
    for div in pool.findAll('div', attrs={'id':div1_id}):
        div.replaceWith('<div id='+div2_id+'>' + div.prettify() + '</div>' )
    return pool.prettify()

wrap(doc,'a2','wrapped')