Dans BeautifulSoup, si je veux trouver tous les div dont la classe est span3, je ferais juste:
result = soup.findAll("div",{"class":"span3"})
Cependant, dans mon cas, je veux trouver tous les div dont la classe commence par span3, par conséquent, BeautifulSoup devrait trouver:
<div id="span3 span49">
<div id="span3 span39">
Etc...
Comment réaliser ce que je veux? Je connais les expressions régulières; cependant, je ne sais pas comment les implémenter dans une belle soupe et je n'ai trouvé aucune aide en parcourant la documentation de BeautifulSoup.
Eh bien, ce sont les attributs id
que vous affichez:
<div id="span3 span49">
<div id="span3 span39">
Dans ce cas, vous pouvez utiliser:
soup.find_all("div", id=lambda value: value and value.startswith("span3"))
Ou:
soup.find_all("div", id=re.compile("^span3"))
Si ce n'était qu'une faute de frappe et que vous avez en fait class
les attributs commencent par span3
, et vous avez vraiment besoin de vérifier la classe pour commencer par span3
, vous pouvez utiliser le "commence par" sélecteur CSS :
soup.select("div[class^=span3]")
C'est parce que vous ne pouvez pas vérifier l'attribut class
de la même manière que vous avez vérifié l'attribut id
parce que class
est spécial, c'est un attribut à valeurs multiples =.
Cela fonctionne aussi:
soup.select("div[class*=span3]") # with *= means: contains