62821


今現在、beautifulsoup4を使ってスクレイピングを行っています。

やりたいこと  
`<div class='ex1'></div>` を`<p id='good'>`で挟む。

[code]

    <p id='good'><div class='ex1'></div></p>
    
[/code]

HTML

[code]

    <html>
        <head></head>
        <body>
            <h1 class="1st">最初の章</h1>
               <div class="ex1">
                <ul>
                    <li id="foo">項目1</li>
                    <li id="bar">項目2</li>
                    <li id="bar">項目3</li>
                </ul>
               </div>
               <div class="ex2">
                <ul>
                    <li id="foo">項目1</li>
                    <li id="bar">項目2</li>
                    <li id="bar">項目3</li>
                </ul>
               </div>
        </body> </html>
    
[/code]

やりたいことのイメージ図

[code]

        <html>
            <head></head>
            <body>
                <h1 class="1st">最初の章</h1>
                  <p id='good'>
                   <div class="ex1">
                    <ul>
                        <li id="foo">項目1</li>
                        <li id="bar">項目2</li>
                        <li id="bar">項目3</li>
                    </ul>
                   </div>
                  </p>
                   <div class="ex2">
                    <ul>
                        <li id="foo">項目1</li>
                        <li id="bar">項目2</li>
                        <li id="bar">項目3</li>
                    </ul>
                   </div>
            </body> </html>
    
[/code]

pythonの試したスクリプトと結果

[code]

    from bs4 import BeautifulSoup
    
    # htmlは仮でおいています。
    soup = BeautifulSoup(html, 'html.parser')
    
    item = soup.find(class_="ex1")
    
    newtag = soup.new_tag('p',id='good')
    
    item.select('div.item-right')[0].append(newtag)
    
[/code]

実行結果  
div.ex1のタグが閉じるところにアペンドしてしまって、pでdivを挟むことができません。

* * *
[code]

    <html>
        <head></head>
        <body>
            <h1 class="1st">最初の章</h1>
               <div class="ex1">
                <ul>
                    <li id="foo">項目1</li>
                    <li id="bar">項目2</li>
                    <li id="bar">項目3</li>
                </ul>
                <p id='good'></p>
                </div>
               <div class="ex2">
                <ul>
                    <li id="foo">項目1</li>
                    <li id="bar">項目2</li>
                    <li id="bar">項目3</li>
                </ul>
               </div>
        </body> </html>
    
[/code]


CC BY-SA 4.0
2020-02-05T10:56:05.853
62807
2020-02-07T07:44:40.147
2020-02-05T12:52:21.477
3060
36091
question
python python3 beautifulsoup
スクレイピングである要素を新しい要素で挟む方法

[code]

    from bs4 import BeautifulSoup
    
    # htmlは仮でおいています。
    soup = BeautifulSoup(html, 'html.parser')
    
    soup.select_one(".ex1").wrap(soup.new_tag('p', id='good'))
    
[/code]

@metropolisさん 引用

上記で解決しました。


CC BY-SA 4.0
2020-02-06T06:27:02.267
62821
2020-02-07T07:44:40.147
2020-02-07T07:44:40.147
3060
36091
62807
answer