2016-08-30 9 views
0

を使用して、私は次のテーブルがあります。番目のテキスト

<table class="information"> 
    <tr> .... lots of rows with <th> and <td></tr> 
    <tr> 
    <th>Nationality</th> 
    <td><a href="..">Stackoverflowian</a></td> 
    </tr> 
</table> 

を、私はそれで「国籍」と目下のtdタグの内側でテキストを検索します。そこをどのようにナビゲートすればよいですか?私はBeautifulsoupとPythonを使用しています。

はそれだけでそのnext siblingを取得し、その後、thタグを探す最初の目に

答えて

2

を見つけるには十分イマイチことを強調するために、この上記番目とTDタグがたくさんあることを追加しました:

soup = BeautifulSoup(html) 
ths = soup.find_all('th') 
for th in ths: 
    if th.text == "Nationality": 
     print th.next_sibling.next_sibling.text 

# Stackoverflowian 

next_siblingを2回実行する必要があります。これは、最初の行が改行を与えるためです。

+0

find_parent()を検討? – bjornasm

+1

@bjornasm絶対に。複数の「th」タグがある場合、それらをすべて見つけることができ、それらを繰り返します。私は自分の答えを編集します – TerryA

1

私はあなたが解析しようとしている特定のHTMLページを与えたときにこの回答を修正しました。あなたがfor the table自体を探しているなら

r = requests.get("http://https://en.wikipedia.org/wiki/Usain_Bolt") 
# test that we loaded the page successfully! 
soup = BeautifulSoup(r.text, "html.parser") 

thTag = soup.find('th', text='Nationality'): 
tdTag = thTag.next_sibling.next_sibling 

print(tdTag.text) 
>>>'Jamaican' 
+0

解決策として投稿する前に、答えをテストする必要があります。 \t URL =「https://en.wikipedia.org/wiki/Usain_Bolt」 \t \t:あなたの方法は正しいですが、不正なコードを掲示することは、単に次のコードでは動作しませんOPと将来の訪問者 – TerryA

+0

これを混同しますスープ(テキスト= '国籍')内の要素のためのR = ur.urlopen(URL).read() \t \tスープ= BeautifulSoup(R、 "html.parser") \t \t: \t \t \tプリント(要素。次の兄弟()) TypeError: 'NoneType'オブジェクトは呼び出し可能ではありません – bjornasm

+0

スープを定義すると、解析するために実際のHTMLコードを与える必要があります。上の例では、リクエストオブジェクト全体rを与えています。代わりにr.textを渡してください。 –

0

その後、私が欲しいテーブルヘッダは、HTMLの最初のテーブルのヘッダーでない場合、これは失敗しない

関連する問題