2016-11-07 32 views
1

他のタグの隣に特定のタグのみを取得する方法。だから私が行う場合beautifulsoupのpythonを使用してfindallで子タグを指定する方法

soup.findAll('blockquote')私はすべてのブロッククォートのリストを取得しますが、私はまた、名前がattrのタグの隣にもblockquoteが必要です。 <a name="*">

のでblockquotesの私のリストは、このような何か含まれています:私はここで、以下の

<blockquote><a name="*"> </blockquote> 

は一例ですが、いくつかの他のBLOCKQUOTEがあり、他のインナーにしたい場合は

<blockquote> 
    <i>Intro </i> 
    </blockquote> 

をタグ。しかし、私は<a name="*">内部タグを持つものだけを必要とします。うまく

<blockquote> 
<i>Intro </i> 
</blockquote>, <blockquote> 
<a name="1">a </a><br> 
</br></blockquote>, <blockquote> 
<a name="2">x </a><br> 
<a name="3">y </a><br> 
<a name="4">z </a><br> 
</br></br></br></blockquote> 

、altermately私はタグの直接の子であるすべてのaのタグを取得してから(blockquotes)両親を得ることについてどのようにこの

<blockquote> 
    <a name="1">a </a><br> 
    </br></blockquote>, <blockquote> 
    <a name="2">x </a><br> 
    <a name="3">y </a><br> 
    <a name="4">z </a><br> 
    </br></br></br></blockquote> 

答えて

1

のようなものを取得したい結果が欲しいです?

from bs4 import BeautifulSoup 

soup = BeautifulSoup(""" 
<blockquote> 
<i>Intro </i> 
</blockquote>, <blockquote> 
<a name="1">a </a><br> 
</br></blockquote>, <blockquote> 
<a name="2">x </a><br> 
<a name="3">y </a><br> 
<a name="4">z </a><br> 
</br></br></br></blockquote> 
""", 'html.parser') 

for a in soup.select('blockquote > a'): 
    print(a.parent) 

結果:

<blockquote> 
<a name="1">a </a><br> 
</br></blockquote> 
<blockquote> 
<a name="2">x </a><br> 
<a name="3">y </a><br> 
<a name="4">z </a><br> 
</br></br></br></blockquote> 
2

それとも、あなたがそれを行うことができますが1にsearching functionを行く:tag.atag.find("a")と同等です

soup.find_all(lambda tag: tag.name == "blockquote" and tag.a) 

つまり、これはa子要素を持つすべての要素を見つけるでしょう。

関連する問題