2016-09-10 8 views
0

が、私はこのウェブサイトから、漢字の記述を抽出しようとしています、)(find_next_siblingからテキストを抽出:http://www.hsk.academy/en/hsk_1BeautifulSoup

例のHTML:

 <tr> 
      <td> 
       <span class="hanzi"><a href="/en/characters/%E7%88%B1">爱</a></span> 
       <br/>ài</td> 
      <td>to love; affection; to be fond of; to like</td> 
     </tr> 

を、私は最後のTDタグのテキストをしたいと思います文字の各説明のリストに入れる。しかし、現在、タグ自体を含めてタグ全体が与えられています。 .text find_next_sibling():AttributeError: 'NoneType'オブジェクトには属性 'text'がありません。

これは私のコードです:<span>タグになります(id="flat_list"を持つテーブル内の)クラスhanziのすべてのタグ

english_descriptions = [] 
table = soup.find('table', id='flat_list') 
for e in table.select('.hanzi'): 
    english_desc = e.parent.find_next_sibling().text 
    if not any(english_desc in s for s in english_descriptions): 
     english_descriptions.append(english_desc) 

この選択(発見):

for item in soup.find_all("td"): 
     EnglishItem = item.find_next_sibling() 
     if EnglishItem:   
      if not any(EnglishItem in s for s in EnglishDescriptionList): 
       EnglishDescriptionList.insert(count, EnglishItem) 
       count += 1 
      print EnglishDescriptionList 
+0

希望の出力のようにもっと明確にすることができます。 – Sandeep

答えて

1

はこれを試してみてください。その後、各<span>の親がアクセスされます。これは、各行の最初の<td>です。最後に、次の兄弟にアクセスし、これは英語の説明を含むターゲットタグです。

あなたはcountを廃止し、ただ、私はあなたが現在の英語の説明は、既存の1のストリングがあるかどうかをチェックする必要はないと思います。また

english_descriptions.append() 

でリストに項目を追加することができます(それはあなたがやろうとしていることですか?)そうでない場合は、このリストの内容に簡略化することができます。

table = soup.find('table', id='flat_list') 
english_descriptions = [e.parent.find_next_sibling().text for e in table.select('.hanzi')] 
+0

このコードは私にエラーを与えます。:english_desc = e.parent.find_next_sibling()テキスト はAttributeError: 'NoneType' 私は声明 "::はAttributeError ....私はfind_next_siblingを.TEXTすることはできません()" を理解していませんでしたオブジェクトには属性 'text'がありません –

+0

このコードは、質問に含まれているHTMLスニペットで動作しますが、実際のHTMLドキュメントには2つのテーブルがあります。私は2番目のテーブルに検索を制限する答えを変更しました。 – mhawke