2017-10-04 3 views
0

J'essaie de trouver un sélecteur dans une page html. La plupart de mes sélecteurs retournent le bon résultat sauf ceux qui ont un identifiant et classent les deux.Belle Soupe impossible de trouver les sélecteurs qui ont l'ID et la classe en eux

Exemple:

soup = BeautifulSoup(html, "html.parser") 
selectors_giving_incorrect_value = ["input#symbol input.btn-primary", 
            "input.stackbar input#symbol.stackbar", 
            "div div#logo.stackarea"] 

selectors_working_right = ["div", "div p"] 

for i in selectors_giving_incorrect_value: 
    soup.select(i)) 

La sortie est toujours vide:

[] 
[] 
[] 

a voulu vérifier s'il y a une façon particulière pour vérifier ce genre de sélecteurs qui ont à la fois id et classe les ?

Répondre

0

Essayez

soup.find_all("div",attrs={"class":"myClass","id":"myID"}) 

Je suppose aussi soup.select("div#IDname.ClassName") œuvres si vous utilisez un sélecteur, ne peut pas vraiment tester en ce moment.

0

essayer de corriger ce sélecteur:

"input#symbol input.btn-primary"

Il devrait être:

"input.btn-primary input#symbol"

Je sais que cela est contraire aux règles de sélection css d'origine, mais il semble fonctionner. Lorsque vous réorganisez l'identifiant et la classe, ce sélecteur ne fonctionnera pas. Cela dépend probablement de l'analyseur que vous utilisez.

+0

entrée # symbole input.btn-primary indique qu'il y a une entrée d'étiquette avec id = symbole & qu'elle a une entrée d'étiquette enfants avec class = btn primary. Ne pas inverser l'ordre trouver des sélecteurs différents? – Piyush

+0

Oui, vous avez raison. Mais dans une pratique, j'ai un autre comportement. Dans mon cas, bs4 trouve des tags qui ont spécifié id et class simultanément. L'avez-vous essayé sur vos données? –