Si mes noms de classe sont constamment différents, dites par exemple:
listing-col-line-3-11 dpt 41
listing-col-block-1-22 dpt 41
listing-col-line-4-13 CWK 12
Normalement, je pourrais faire:
for EachPart in soup.find_all("div", {"class" : "ClassNamesHere"}):
print EachPart.get_text()
Il y a beaucoup trop de noms de classe pour travailler avec ici, donc un tas d'entre eux sont sortis.
Je sais Python n'a pas de ".contains" que j'utiliserais normalement mais il a un "in". Bien que je n'ai pas été en mesure de trouver un moyen d'incorporer cela.
J'espère qu'il y a un moyen de le faire avec regex. Bien que ma syntaxe Python me laisse vraiment tomber, j'ai essayé des variations sur:
regex = re.compile('.*listing-col-.*')
for EachPart in soup.find_all(regex):
Mais cela ne semble pas faire l'affaire.
BeautifulSoup prend en charge sélecteurs CSS qui vous permettent de sélectionner des éléments en fonction du contenu d'attributs particuliers. Cela inclut le sélecteur *=
pour contient.
Ce qui suit renverra tous les éléments div
avec un attribut class
contenant le texte 'listing-col-':
for EachPart in soup.select('div[class*="listing-col-"]'):
print EachPart.get_text()
Yu peut essayer ceci:
regex = re.compile('.*listing-col-.*')
for EachPart in soup.find_all("div", {"class" : regex}):
print EachPart.get_text()