BeautifulSoup en Python - l'obtention de la n-ème de tag de type
J'ai un code html qui contient de nombreux <table>
s.
Je vais essayer d'obtenir les informations contenues dans le second tableau. Est-il un moyen de le faire sans l'aide de soup.findAll('table')
?
Lorsque j'utilise soup.findAll('table')
, j'obtiens une erreur:
ValueError: too many values to unpack
Est-il un moyen pour obtenir le n-ème balise code ou d'une autre manière qui ne nécessite pas de passer par toutes les tables? Ou devrais-je voir si je peux ajouter des titres aux tables? (comme <table title="things">
)
Il y a aussi des en-têtes (<h4>title</h4>
) au-dessus de chaque table, si cela aide.
Grâce.
MODIFIER
Voici ce que je pensais lorsque j'ai posé la question:
J'ai été déballage des objets en deux valeurs, quand il y avait beaucoup plus. Je pensais que ce serait juste de me donner les deux premières choses à partir de la liste, mais bien sûr, elle a gardé de me donner l'erreur mentionnée ci-dessus. J'étais pas au courant de la valeur de retour est une liste et pensé que c'était un objet spécial ou quelque chose et j'ai fondé mon code de mon amis.
Je pensais à cette erreur signifie qu'il n'y en avait trop, les tableaux de la page et qu'il ne pouvait pas les traiter, donc j'ai demandé un moyen de le faire sans la méthode que j'utilisais. Je devrais probablement avoir arrêté en supposant que les choses.
Maintenant je sais que ça renvoie une liste et je peux l'utiliser dans une boucle for ou obtenir une valeur avec soup.findAll('table')[someNumber]
. J'ai appris ce déballage est et comment l'utiliser ainsi. Merci à tous ceux qui ont aidé.
J'espère que ça efface les choses, maintenant que je sais ce que je fais à ma question moins de sens que lorsque je l'avais demandé, j'ai donc pensé que je venais de mettre ici une note sur ce que je pensais.
EDIT 2:
Cette question est maintenant assez vieux, mais je vois encore que je n'ai jamais été très clair sur ce que je faisais.
Si ça aide quelqu'un, j'ai été de tenter de décompresser le findAll(...)
résultats, dont le montant est à eux que je ne connaissais pas.
useless_table, table_i_want, another_useless_table = soup.findAll("table");
Comme il n'y avait pas toujours le nombre de tables que j'avais deviné à la page, et toutes les valeurs du tuple besoin d'être déballé, j'ai reçu le ValueError
:
ValueError: too many values to unpack
Donc, je cherchais le moyen de saisir la deuxième (ou quel que soit l'indice) de la table dans le tuple retourné sans que des erreurs sur le nombre de tables ont été utilisés.
soup.findAll('table')
n' pas provoquer un ValueError
. Merci de poster votre code complet. too many values to unpack
signifie que vous disposez de plusieurs variables sur la partie gauche de l'expression.soup.find(title="things")
??Au sommet de la poste, j'ai dit que je l'utilise sur code avec de nombreux
<table>
s en elle. Je l'utilise sur cette page: view-source:dhmc.us/joueurs/view/nasonfish et je suis en utilisant ce code: table1, table2 = soup.find_all('table')
soup.find_all('table')
renvoie une liste. tables = soup.find_all('table')
devrait fonctionnerL'erreur indique que vous avez plus que 2 tables, donc le décompresser échoue. Ne pas utiliser un tuple déballage dans ce cas.
OriginalL'auteur nasonfish | 2012-12-30
Vous devez vous connecter pour publier un commentaire.
Pour obtenir le deuxième tableau de l'appel
soup.findAll('table')
, l'utiliser comme une liste, il suffit de les indexer:Ce n'
findAll('table')[1]
signifie vraiment? Il vient de trouver la deuxième table ou de trouver tous les tableaux premier, puis le deuxième tableau?Il trouve tous les tableaux premier, puis le deuxième tableau. FindAll est une fonction et sa valeur de retour donne une liste et puis, nous avons le deuxième élément de
OriginalL'auteur Martijn Pieters
Martjin Pieter de réponse permettra de le faire fonctionner en effet. J'ai eu une certaine expérience avec imbriqué
table
balise qui a cassé mon code quand je l'ai tout simplement obtenir le deuxième tableau dans la liste sans y prêter attention.Lorsque vous essayez de
find_all
et obtenir le n-ième élément, il est possible que vous vous trompez, vous feriez mieux de localiser le premier élément que vous voulez, et assurez-vous que le n-ième élément est en fait un frère de cet élément à la place des enfants.find_next_sibling()
pour la sécurité de votre codeJuste au cas où vous en avez besoin. Je vais inscrire mon code ci-dessous(utilisez recursive=FALSE).
OriginalL'auteur B.Mr.W.
Voici ma version
De sortie:
OriginalL'auteur Sergei