12

BeautfulSoup を使用して検索し、 に置き換え<\a>たい<\a><br>。で開き、解析してすべてのタグurllib2を抽出する方法を知っています。<a>私がやりたいことは、終了タグを検索して、終了タグと改行で置き換えることです。どんな助けでも大歓迎です。

編集

次のようなものになると思います。

soup.findAll('a').

ドキュメントには、次のものがあります。

find(text="ahh").replaceWith('Hooray')

したがって、次のようになると思います。

soup.findAll(tag = '</a>').replaceWith(tag = '</a><br>')

しかし、それは機能せず、python help() はあまり役に立ちません

4

3 に答える 3

22

これにより、各要素<br>の末尾にタグが挿入されます。<a>...</a>

from BeautifulSoup import BeautifulSoup, Tag

# ....

soup = BeautifulSoup(data)
for a in soup.findAll('a'):
    a.parent.insert(a.parent.index(a)+1, Tag(soup, 'br'))

BeautifulSoup は終了タグを個別に操作しないため、使用できませんsoup.findAll(tag = '</a>')。それらは同じ要素の一部と見なされます。


<a>コメントで尋ねるように要素を要素内に入れたい場合は<p>、これを使用できます。

for a in soup.findAll('a'):
    p = Tag(soup, 'p') #create a P element
    a.replaceWith(p)   #Put it where the A element is
    p.insert(0, a)     #put the A element inside the P (between <p> and </p>)

<p>繰り返しますが、 and</p>は同じものの一部であるため、個別に作成しません。

于 2010-01-15T17:56:09.660 に答える
3

終了タグは置き換えません。BeautifulSoup では、HTML でいっぱいの文字列ではなく、ブラウザーのようなドキュメント オブジェクト モデルを扱っています。そのため、開始タグを置き換えずに終了タグを「置き換える」ことはできませんでした。

やりたいことは、<br>要素の直後に新しい要素を挿入することです<a>...</a>。そのためには、親要素内の要素のインデックスを見つけて、そのインデックスの<a>直後に新しい要素を挿入する必要があります。例えば。

soup= BeautifulSoup('<body>blah <a href="foo">blah</a> blah</body>')
for link in soup.findAll('a'):
    br= Tag(soup, 'br')
    index= link.parent.contents.index(link)
    link.parent.insert(index+1, br)
# soup now serialises to '<body>blah <a href="foo">blah</a><br /> blah</body>'
于 2010-01-15T17:57:23.607 に答える