8

を使用して HTML ファイルから CSS クラスを取得する方法はありますBeautifulSoupか? スニペットの例:

<style type="text/css">

 p.c3 {text-align: justify}

 p.c2 {text-align: left}

 p.c1 {text-align: center}

</style>

完全な出力は次のようになります。

cssdict = {
    'p.c3': {'text-align': 'justify'},
    'p.c2': {'text-align': 'left'},
    'p.c1': {'text-align': 'center'}
}

このようなことはできますが:

L = [
    ('p.c3', {'text-align': 'justify'}),  
    ('p.c2', {'text-align': 'left'}),    
    ('p.c1', {'text-align': 'center'})
]
4

3 に答える 3

11

BeautifulSoup 自体は CSS スタイル宣言をまったく解析しませんが、そのようなセクションを抽出して、専用の CSS パーサーで解析することができます。

必要に応じて、Python で使用できる CSS パーサーがいくつかあります。cssutils (python 2.5 以降 (python 3 を含む) が必要) を選択します。サポートが最も充実しており、インライン スタイルもサポートしています。

他のオプションはcss-pytinycssです。

そのようなすべてのスタイル セクションを取得して解析するには (cssutils の例):

import cssutils
sheets = []
for styletag in tree.findAll('style', type='text/css')
    if not styletag.string: # probably an external sheet
        continue
    sheets.append(cssutils.parseStyle(styletag.string))

cssutilこれらを組み合わせたり、インポートを解決したり、外部スタイルシートをフェッチしたりすることもできます。

于 2012-07-16T10:16:48.237 に答える
5

BeautifulSoup と cssutils の組み合わせはうまく機能します。

    from bs4 import BeautifulSoup as BSoup
    import cssutils
    selectors = {}
    with open(htmlfile) as webpage:
        html = webpage.read()
        soup = BSoup(html, 'html.parser')
    for styles in soup.select('style'):
        css = cssutils.parseString(styles.encode_contents())
        for rule in css:
            if rule.type == rule.STYLE_RULE:
                style = rule.selectorText
                selectors[style] = {}
                for item in rule.style:
                    propertyname = item.name
                    value = item.value
                    selectors[style][propertyname] = value

BeautifulSoup は html (head & body) のすべての「スタイル」タグを解析し、.encode_contents() は BeautifulSoup オブジェクトを cssutils が読み取れるバイト形式に変換し、cssutils は個々の CSS スタイルをプロパティ/値まで解析します。 rule.selectorText と rule.style によるレベル。

注:「rule.STYLE_RULE」はスタイルのみを除外します。cssutils のドキュメントでは、メディア ルール、コメント、およびインポートをフィルタリングするためのオプションについて詳しく説明しています。

これを関数に分解するとすっきりしますが、要点はわかります...

于 2016-08-27T22:28:56.127 に答える
0

tinycssパーサーは、PythonでCSSを明示的に解析するために存在します。BeautifulSoupはHTMLタグをサポートしており、正規表現を使用しない限り、特定のcssクラスを検索することはできません。これはある程度のCSS3もサポートします。

http://packages.python.org/tinycss/

PS:ただし、Python2.6以降でのみ機能します。

于 2012-07-16T09:43:34.813 に答える