1

IDに基づいてdivをラップできるようにしたい。たとえば、次の 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>

ドキュメント、ID、およびセレクターを受け取る Python 関数を作成したいと考えています。id指定されたdocumentindivを class または idでラップしselectorます。たとえば、上記の HTML が変数にあるとしましょうdoc

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

次の HTML を返します。

<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 を調べましたが、特定のタグ内のすべてを取得できるだけでなく、文字列を追加してドキュメントを簡単に編集できる機能を提供するものは見つかりませんでした。存在しない場合、これに対する良いアプローチは何でしょうか?

4

2 に答える 2

1

BeautifulSoupある程度の依存関係をもたらすだけでなく、多くの利便性ももたらすことをお勧めします。次のコードは、の目標を達成できますwrap

    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'))

そしてprint soup.prettify()、結果を見ることができます:

<html>
 <body>
  <div id="info">
   <div id="a1">
   </div>
   <div id="wrapper">
    <div id="a2">
     <div id="description">
     </div>
     <div id="links">
      <a href="http://example.com">
       link
      </a>
     </div>
    </div>
   </div>
  </div>
 </body>
</html>
于 2013-07-10T07:53:48.580 に答える