web-dev-qa-db-ja.com

クラスが「含む」または正規表現の場合の美しいスープ?

私のクラス名が常に異なる場合は、たとえば次のようにします。

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」はあります。それを組み込む方法を見つけることはできませんでしたが。

正規表現でこれを行う方法があることを願っています。再び私のPython構文は本当に私を失望させていますが、私はさまざまなものを試してきました:

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

しかし、それはトリックをしているようではないようです。

21
PoweredByCoffee

BeautifulSoupは CSSセレクター をサポートしており、特定の属性の内容に基づいて要素を選択できます。これには、コンテナのセレクタ*=が含まれます。

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

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

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

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