2008-10-21 11 views
6

J'ai essayé de supprimer certaines données de fichiers HTML. J'ai la logique codée pour obtenir les bonnes cellules. Maintenant, je me bats pour obtenir le contenu réel de la 'cellule':Comment obtenez-vous le texte d'une 'cellule de données' HTML en utilisant BeautifulSoup

voici mon htm snip

headerRows [0] [10] .contents

[<font size="+0"><font face="serif" size="1"><b>Apples Produced</b><font size="3">  
    </font></font></font>] 

Notez que ceci est une liste élément de Python [].

J'ai besoin de la valeur Pommes produites mais je ne peux pas y accéder.

Toutes les suggestions seraient appréciés

suggestions sur un bon livre qui explique cela gagner ma reconnaissance éternelle


Merci pour cette réponse. Cependant, il n'y a pas de réponse plus générale. Qu'advient-il si ma cellule n'a pas d'attribut gras

dire est:

[<font size="+0"><font face="serif" size="1"><I>Apples Produced</I><font size="3">  
    </font></font></font>] 

Pommes Produit

Je suis en train d'apprendre à lire/comprendre la documentation et votre réponse aidera

J'apprécie vraiment cette aide. La meilleure chose à propos de ces réponses, c'est qu'il est beaucoup plus facile de généraliser à partir d'eux puis j'ai été en mesure de le faire à partir de la documentation BeautifulSoup. J'ai appris à programmer dans l'ère Fortran et moi pendant que j'apprécie apprendre Python et suis amzed à son pouvoir-BeautifulSoup est un exemple. faire un ensemble de la documentation est difficile pour moi.

Vive

Répondre

3
headerRows[0][10].contents[0].find('b').string 
5

Le BeautifulSoup documentation devrait couvrir tout ce dont vous avez besoin - dans ce cas, il semble que vous voulez utiliser findNext:

headerRows[0][10].findNext('b').string 

Une solution plus générique qui ne repose pas sur l'étiquette <b> serait être d'utiliser l'argument à findAll, qui vous permet de rechercher seulement NavigableString objets:

>>> s = BeautifulSoup(u'<p>Test 1 <span>More</span> Test 2</p>') 
>>> u''.join([s.string for s in s.findAll(text=True)]) 
u'Test 1 More Test 2' 
0

J'ai une classe de base que j'étend toutes les classes Beautiful Soup avec un tas de méthodes qui m'aident à obtenir du texte dans un groupe d'éléments que je ne veux pas nécessairement compter sur la structure de. L'une de ces méthodes est la suivante:

def clean(self, val): 
    if type(val) is not StringType: val = str(val) 
    val = re.sub(r'<.*?>', '', s) #remove tags 
    val = re.sub("\s+" , " ", val) #collapse internal whitespace 
    return val.strip() #remove leading & trailing whitespace