2016-09-10 3 views
0

Ich versuche, die Beschreibung des chinesischen Zeichens von dieser Website zu extrahieren: http://www.hsk.academy/en/hsk_1Extrahieren von Text aus find_next_sibling(), BeautifulSoup

Beispiel 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> 

Ich möchte den letzten Text des td-Tag für jede Beschreibung des Charakters in eine Liste eingetragen werden. Derzeit wird mir jedoch das gesamte Tag einschließlich der Tags selbst gegeben. Ich kann den Text nicht finden. Find_next_sibling(): AttributeError: Das Objekt 'NoneType' hat kein Attribut 'text'.

Dies ist mein Code:

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

können Sie klarer sein, wie die gewünschte Ausgabe ist. Ich habe die Anweisung nicht verstanden "Ich kann den Text nicht find_next_sibling(): AttributeError: ...." – Sandeep

Antwort

1

Try this:

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) 

Dieser wählt (Funde) Alle Tags der Klasse hanzi (in der Tabelle mit id="flat_list"), die die <span> Tags sein wird. Dann wird auf das übergeordnete Element jedes <span> zugegriffen - dies ist das erste <td> in jeder Zeile. Schließlich wird auf das nächste Geschwister zugegriffen, und dies ist das Ziel-Tag, das die englische Beschreibung enthält.

Sie können mit den count abschaffen und nur Produkten mit

english_descriptions.append() 

auch in die Liste anhänge, ich glaube nicht, dass Sie, ob die aktuelle Englisch Beschreibung überprüfen müssen, ist ein Teil eines bestehenden (Ist das, was du versuchst zu tun?). Wenn nicht, können Sie dieses Listenverständnis vereinfachen:

+0

Dieser Code gibt mir den Fehler: english_desc = e.parent.find_next_sibling(). Text AttributeError: 'NoneType' Objekt hat kein Attribut 'text' –

+0

Der Code funktioniert mit dem HTML-Code, den Sie in Ihre Frage eingefügt haben, aber es gibt 2 Tabellen im HTML-Dokument. Ich habe die Antwort geändert, um die Suche auf die zweite Tabelle zu beschränken. – mhawke

Verwandte Themen