2016-01-07 14 views
5

私のクラス名は常に、例えば、異なる発言している場合:クラスに "Contains"またはRegexがある場合、美しいスープ?

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

通常、私が行うことができます:

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

これらの束が出ているので、ここで動作するようにあまりにも多くのクラス名があります。 。

私は通常Pythonには ".contains"がありませんが、 "in"があります。私はそれを組み込む方法を工夫することができませんでしたが。

私はregexでこれを行う方法があると思っています。再び私のPythonの構文は本当に私をダウンさせているが、私は上のバリエーションをしようとしてきた:

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

しかし、それはトリックをやっているようには見えません。

答えて

6

BeautifulSoupを使用すると、特定の属性の内容に基づいて要素を選択することができCSS selectorsをサポートしています。これには、containsのセレクタ*=が含まれます。

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

以下は、テキスト '-col-リスト' を含むclass属性を持つすべてのdivの要素を返します。

1

ゆうはこれを試すことができます。

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