2016-01-07 21 views
5

Jeśli moje nazwy klas są stale inny powiedzmy na przykład:Piękna zupa, jeśli klasa "Zawiera" lub Regex?

listing-col-line-3-11 dpt 41 
listing-col-block-1-22 dpt 41 
listing-col-line-4-13 CWK 12 

Normalnie mogę zrobić:

for EachPart in soup.find_all("div", {"class" : "ClassNamesHere"}): 
      print EachPart.get_text() 

Istnieje zbyt wiele nazw klas do pracy z tutaj więc grono z nich są obecnie .

Wiem, że Python nie ma ".contains", którego normalnie używam, ale ma "in". Chociaż nie byłem w stanie wypracować sposobu na włączenie tego.

Mam nadzieję, że istnieje sposób, aby to zrobić z regex. Chociaż znowu mój składni Pythona jest naprawdę pozwalając mnie Próbowałam wariacje na:

regex = re.compile('.*listing-col-.*') 
    for EachPart in soup.find_all(regex): 

Ale to nie wydaje się robić sztuczki.

Odpowiedz

6

BeautifulSoup obsługuje CSS selectors który pozwala wybrać elementy na podstawie zawartości poszczególnych atrybutów. Obejmuje to selektor *= dla zawiera.

Poniższa zwróci wszystkie div elementy z atrybutem class zawierającego tekst „wymieniające-koledzy”:

for EachPart in soup.select('div[class*="listing-col-"]'): 
    print EachPart.get_text() 
1

Yu może spróbuj tego:

regex = re.compile('.*listing-col-.*') 
for EachPart in soup.find_all("div", {"class" : regex}): 
     print EachPart.get_text()