2017-09-22 1 views
1

J'essaie d'extraire le texte dans la colonne 1 et la colonne 3 dans la ligne suivante après les premier et deuxième en gras dans une table html utilisant BeautifulSoup. Les textes en gras n'ont pas de classes ou d'identifiants, et sont au même niveau que les lignes au-dessus et en dessous d'eux. Je suppose que je devrais utiliser next_sibling, mais je ne sais pas exactement comment s'y prendre.Extraire des colonnes spécifiques dans la rangée après chaque rubrique en gras dans la table HTML utiliser BeautifulSoup

Vous pouvez trouver HTML de la table ici: https://github.com/Tokaalmighty/topmover_table_html/blob/master/html

Voilà ma logique:

soup=bs(f1,'html.parser') 
topmovers=soup.find('table',{'class':'topmovers'}) 

bold=topmovers.find_all('b') 
gainer=bold[0] 
gainer_name=bold.find('tr').next_sibling 
gcol1=gainer_name[0] 
gcol3=gainer_name[2] 

loser=bold[1] 
loser_name=bold.find('tr').next_sibling 
lcol1=loser_name[0] 
lcol3=loser_name[2] 

print(gcol1,gcol3,lcol1,lcol3) 
+0

pouvez-vous partager la structure html? – eLRuLL

Répondre

1

Vous pouvez utiliser find_next pour sélectionner la prochaine 'tr', puis obtenir le texte avec stripped_strings

soup=bs(f1,'html.parser') 
topmovers=soup.find('table',{'class':'topmovers'}) 

bold=topmovers.find_all('b') 
gainer=bold[0] 
gainer_name=gainer.find_next('tr') 
gainer_strings = list(gainer_name.stripped_strings) 
gcol1=gainer_strings[0] 
gcol3=gainer_strings[2] 

loser=bold[1] 
loser_name=loser.find_next('tr') 
loser_strings = list(loser_name.stripped_strings) 
lcol1=loser_strings[0] 
lcol3=loser_strings[2] 

print(gcol1, gcol3, lcol1, lcol3) 

McDermott International 6,55 Bill Barrett Corporation 2,87