0

HTMLドキュメントがあり、特定のIDを持つテーブルを解析したいのですが、これは常に特定のIDを持つdivタグ内にあります。これが私が試したことです:

soup = BeautifulSoup(html)
target_div = soup('div', {'id' : 'left'})
target_table = target_div.findNextSibling('table')

明らかにそれは機能していません。2番目のステートメントは、ドキュメント内を移動する代わりにResultSetを返すようです(これは理にかなっていると思いますが、他の方法で必要なものを取得する方法がわかりません!)。この種の解析を行うための正しい方法は何ですか?

4

2 に答える 2

2

findNextSiblingtarget_div元の要素と同じ親に含まれるテーブルを探します。divに含まれるテーブルを探します。そのために使用.find()します:

target_div = soup.find('div', {'id' : 'left'})
target_table = target_div.find('table')

単純なケース (含まれているテーブルなど) では、タグ名を属性として使用できます。

target_div = soup.find('div', {'id' : 'left'})
target_table = target_div.table

.find_all()メソッドを使用するのと同じように、タグを呼び出していました。一致するすべてのタグ、リストを.find_all()返します。結果セットをループする必要がありますが、(id を使用して)単一のdivを探しているため、結果を1 つだけ返す whichを使用する方が適切です。.find()

複数の一致を処理する必要がある場合は、結果を.find_all()リストとして扱います。それをループします:

for element in soup.find_all('div')
    contained_table = element.find('table')

またはインデックスを使用します。

second_match = soup.find_all('div')[1]
于 2012-11-16T12:54:15.270 に答える
1

CSS セレクターを使用することもできます。

target_table = soup.select('div#yourid > table#yourtableid')[0]
于 2012-11-16T12:56:18.840 に答える