2016-09-26 12 views
0

あるすべての「H2」のタグを検索し、私は次のことを試してみました:BeautifulSoupを使用して属性を持つ特定のdiv「ID」の子どもたちと、値「列」左

q = soup.div.find_all("div", { "id" : "column-left" }, "h2") 

しかし、これは私にテキストを与えます<p>も同様です。私はちょうど特定のdivの子であるh2がほしいです。

+0

"h2"とは何ですか? 3番目の引数は* recursive *ですので、あなたはh2を探していません –

+0

@Padraic Cunningham私はh2を探しています。しかし、h2だけではなく....属性 'id'と値 'column-left'を持つdivの子であるh2だけ – BitByBit

+0

findを使用して 'find_all( 'h2'、recursive = False) 'は何を返しますか? –

答えて

0

をマッピング記述する必要はありませんので、

q = soup.find('div', { 'id' : 'column-left' }).find_all('h2') 

はまたfind_allは、オプションのパラメータ「ID」を持っていますとにかく書いて管理しやすいCSSセレクタを使うことができます。例:

>>> from bs4 import beautifulsoup 
>>> soup = BeautifulSoup('<div id=column-left><h2>Header</h2><p>Paragraph</p><h2>Another header</h2><p>Another paragraph</p></div>') 
>>> soup.select('div#column-left > h2') 
[<h2>Header</h2>, <h2>Another header</h2>] 
0

なぜsoup.divにアクセスしていますか?

はこれを試してください:あなたはBeautifulSoup(およびあなたの最近のバージョンを使用する場合の属性は

q = soup.find('div', id='column-left').find_all('h2') 
+0

AttributeError: 'ResultSet'オブジェクトに属性 'find_all'がありません解決策を見つけましたが、むしろ長いので多分もっと良い方法があります:' q = soup.div.find_all( "divのkの場合: p = k.find_all( "h2") pのiの場合: print(i.text) ' – BitByBit

+0

@BitByBit i edited一例、今すぐお試しください。また、戻り値の型についてはこの[question](http://stackoverflow.com/q/24108507/5091346)を参照してください。 –

+0

はい、これはうまくいきました。 Jaaps3の答えもうまくいき、私はあなたの答えを選択します。なぜなら、CSSセレクタを使うとコードが短くて簡単だからです。しかし、私はあなたにとても感謝したいと思います:-) – BitByBit

関連する問題