2017-12-27 18 views
0

<div>の束を含むHTML文書があります。子は<p>、内は<href>です。目標はこれです、美しいスープ - 外側のタグを外す

  1. は取り除か各の終わりに<div><p>タグ
  2. を削除<div></br>

を追加する例

ように、この:

<div> 
    <p> 
    <a href="" id="tnt1">[1]</a>"RFC 4456 - BGP Route Reflection: An Alternative to Full ... - IETF Tools.">ref="https://example.com">https://https://example.com"</a></span><span>. Accessed 15 Nov. 2017. 
    </p> 
</div> 

はこのようになります。

<a href="" id="tnt1">[1]</a>"RFC 4456 - BGP Route Reflection: An Alternative to Full ... - IETF Tools.">ref="https://example.com">https://https://example.com"</a></span><span>. Accessed 15 Nov. 2017. 
</br> 

現在

は、これまでのところ、私のコードは次のとおりです。

from bs4 import BeautifulSoup 

for div in soup.find_all(name=re.compile(r'div')): 
    print div 

しかし、すべての例ではなく、実際のタグを内部テキストを置き換えるために指すように思われます。また、bs3でこれを行う方法がある場合は、他のすべてのコードが現在v3を使用しているので理想的です。

誰かが正しい方向に私を指すことができますか?おかげで、

答えて

1

''.join(str(x) for x in div.p.contents)は、私はparent = div.parentは私がすべてのサブタグでdivを削除div.extract()を使用して、後で

を、それを使用して取得私BS4

上の文字列として内部HTMLを提供します。

を使用するparent.append()私はインナーHTMLを戻しました。

from bs4 import BeautifulSoup 

data = '''<strong> 
<div> 
    <p> 
    <a href="" id="tnt1">[1]</a>"RFC 4456 - BGP Route Reflection: An Alternative to Full ... - IETF Tools.">ref="https://example.com">https://https://example.com"</a></span><span>. Accessed 15 Nov. 2017. 
    </p> 
</div> 
</strong>''' 

soup = BeautifulSoup(data, 'html.parser') 

for div in soup.find_all('div'): 
    parent = div.parent 

    inner = ''.join(str(x) for x in div.p.contents) + "<br/>" 
    print('--- inner ---') 
    print(inner) 

    # remove div with all subtags 
    div.extract() 

    parent.append(BeautifulSoup(inner, 'html.parser')) 
    print('--- after ---') 
    print(parent) 

結果:

--- inner --- 

<a href="" id="tnt1">[1]</a>"RFC 4456 - BGP Route Reflection: An Alternative to Full ... - IETF Tools.">ref="https://example.com">https://https://example.com"<br/> 
--- after --- 
<strong> 

<a href="" id="tnt1">[1]</a>"RFC 4456 - BGP Route Reflection: An Alternative to Full ... - IETF Tools."&gt;ref="https://example.com"&gt;https://https://example.com"<br/></strong> 
+0

ありがとうございます。どのように前のdivの代わりにこれを追加しますか? – felix001

+0

新しいコードを見る - 私は 'div'を取り除く' div.extract() 'と内側のHTMLを戻す' parent.append() 'を使います。 – furas

関連する問題