sélection d'un deuxième enfant dans la belle soupe de soupe de.sélectionnez?
J'ai:
<h2 id='names'>Names</h2>
<p>John</p>
<p>Peter</p>
maintenant, quelle est la meilleure façon d'obtenir la Pierre ici si j'ai la balise h2 déjà? Maintenant que j'ai essayé:
soup.select("#names > p:nth-child(1)")
mais ici, je reçois nth-child NotImplementedError:
NotImplementedError: Only the following pseudo-classes are implemented: nth-of-type.
Donc je ne suis pas sûr de ce qui se passe ici. La deuxième option est de simplement obtenir tous 'p' de la balise enfants et dur, sélectionnez [1], mais ensuite, il y a un danger de l'indice de gamme qui aurait besoin d'entourer chaque tentative pour obtenir Peter avec try/except qui est un peu idiot.
Toute façon pour sélectionner nth-child avec de la soupe.la fonction select ()?
EDIT:
remplacement nth-child avec nth-of-type semblait faire l'affaire, de sorte que la ligne correcte est:
soup.select("#names > p:nth-of-type(1)")
ne sais pas pourquoi il n'accepte pas nth-child, mais il semble que les deux nth-child et nth-of-type les mêmes résultats.
OriginalL'auteur Granitosaurus | 2014-07-13
Vous devez vous connecter pour publier un commentaire.
L'ajout de votre modifier, à titre de réponse, de sorte qu'il peut être plus facilement trouvé par les autres:
Utilisation
nth-of-type
au lieu denth-child
:OriginalL'auteur Stunner
'nth-de-l'enfant n'est tout simplement pas mis en œuvre dans beautifulsoup4 (au moment de l'écriture), il n'y a pas de code dans le beautifulsoup base de code pour le faire. Les auteurs ont ajouté explicitement le "NotImplementedError" pour expliquer cela, voici le code
Donné le code html que vous citez dans votre question, vous n'êtes pas à la recherche pour un enfant de h2#noms.
Ce que vous êtes vraiment la recherche est la deuxième adjacente frère, je ne suis pas un sélecteur css gourou, mais j'ai trouvé que cela fonctionnait.
OriginalL'auteur Jeremy Allen
Belle Soupe 4.7.0 (publié au début de 2019) prend désormais en charge la plupart des sélecteurs, y compris
:nth-child
:Donc, si vous mettez à niveau votre version:
Vous serez en mesure d'utiliser presque tous les sélecteurs vous avais jamais besoin, y compris
nth-child
.Cela dit, notez que votre entrée en HTML, la
#names
h2
balise ne fait pas d'enfants:Ici, il y a juste 3 éléments, qui sont tous des frères et sœurs, de sorte
ne fonctionne pas, même en CSS ou Javascript.
Si le
#names
de l'élément a de la<p>
s comme enfants, sélecteur, dans une mesure:De sortie:
Bien sûr, la
John
<p>
est le premier enfant de la#names
parent. Si vous voulezPeter
, utilisez:nth-child(2)
.Si les éléments sont tous adjacents frères et sœurs, vous pouvez utiliser
+
pour sélectionner le frère suivant:De sortie:
OriginalL'auteur CertainPerformance