comment obtenir tbody de table à partir de python belle soupe ?
Je suis en train de ferraille Année & les Gagnants ( premier & deuxième colonnes ) à partir de la "Liste des matches de table" (deuxième tableau) à partir de
http://en.wikipedia.org/wiki/List_of_FIFA_World_Cup_finals: Je suis en utilisant le code ci-dessous:
import urllib2
from BeautifulSoup import BeautifulSoup
url = "http://www.samhsa.gov/data/NSDUH/2k10State/NSDUHsae2010/NSDUHsaeAppC2010.htm"
soup = BeautifulSoup(urllib2.urlopen(url).read())
soup.findAll('table')[0].tbody.findAll('tr')
for row in soup.findAll('table')[0].tbody.findAll('tr'):
first_column = row.findAll('th')[0].contents
third_column = row.findAll('td')[2].contents
print first_column, third_column
Avec le code ci-dessus, j'ai été en mesure d'obtenir des & la troisième colonne de l'amende juste. Mais quand j'utilise le même code avec http://en.wikipedia.org/wiki/List_of_FIFA_World_Cup_finals
, Il ne pouvait pas trouver tbody comme son élément, mais je peux voir le tbody quand j'ai inspecter l'élément.
url = "http://en.wikipedia.org/wiki/List_of_FIFA_World_Cup_finals"
soup = BeautifulSoup(urllib2.urlopen(url).read())
print soup.findAll('table')[2]
soup.findAll('table')[2].tbody.findAll('tr')
for row in soup.findAll('table')[0].tbody.findAll('tr'):
first_column = row.findAll('th')[0].contents
third_column = row.findAll('td')[2].contents
print first_column, third_column
Voici ce que j'ai reçu de commentaires d'erreur:
'
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-150-fedd08c6da16> in <module>()
7 # print soup.findAll('table')[2]
8
----> 9 soup.findAll('table')[2].tbody.findAll('tr')
10 for row in soup.findAll('table')[0].tbody.findAll('tr'):
11 first_column = row.findAll('th')[0].contents
AttributeError: 'NoneType' object has no attribute 'findAll'
'
OriginalL'auteur JPC | 2013-12-11
Vous devez vous connecter pour publier un commentaire.
Si vous consultez par l'inspecter l'outil dans le navigateur, il va insérer le
tbody
balises.Le code source, peut, ou peut ne pas contenir. Je suggère à la recherche à la vue de source si vous voulez vraiment le savoir.
De toute façon, vous n'avez pas besoin de traverser la tbody, il suffit de:
soup.findAll('table')[0].findAll('tr')
devrait fonctionner.OriginalL'auteur Derek Litz
Et ensuite rechercher ce dont vous avez besoin dans le tableau 🙂
OriginalL'auteur GMPrazzoli
Directement exécuter le code ci-dessous.
tr_elements = soup.find_all('table')[2].find_all('tr')
En faisant cela, vous pouvez accéder à l'ensemble des
<tr>
; Vous devrez utiliser la boucle for pour ce faire (Il y a d'autres voies possibles pour itérer trop). N'essayez pas de trouver l' tbody, il est ajouté par défaut.Remarque:
Si vous rencontrez un problème en arriver à la balise de votre choix, de décomposer le précédent balises avec
.decompose()
méthode.OriginalL'auteur Rohit Yadav