3

lxml.html を使用して html ファイルを解析していますが、スタイルシートでセレクターとして使用される HTML クラス、つまり['c1','c2','c3','c4','c5','c6']対応するスタイル情報を取得する必要があります。

スタイルセクションを文字列として抽出し、それを使用して解析しようとしcssutils.parseStringましたが、最終的には次のようになります。

ERROR   CSSStyleRule: No start { of style declaration found: u'<style type="text/css">&#13;' [1:28: ;]
ERROR   Selector: Unexpected CHAR. [1:1: <]
ERROR   Selector: Unexpected CHAR. [1:12: =]
ERROR   Selector: Unexpected STRING. [1:13: "text/css"]
ERROR   Selector: Unexpected CHAR. [1:24: &]
ERROR   SelectorList: Invalid Selector: <style type="text/css">&#13
ERROR   CSSStyleRule: No style declaration or "}" found: u'<style type="text/css">&#13;'
ERROR   CSSStyleRule: No start { of style declaration found: u'&#13;' [2:47: ;]
ERROR   Selector: Unexpected CHAR. [2:43: &]
ERROR   SelectorList: Invalid Selector: &#13
ERROR   CSSStyleRule: No style declaration or "}" found: u'&#13;'
ERROR   CSSStyleRule: No start { of style declaration found: u'&#13;' [3:33: ;]
ERROR   Selector: Unexpected CHAR. [3:29: &]
ERROR   SelectorList: Invalid Selector: &#13
ERROR   CSSStyleRule: No style declaration or "}" found: u'&#13;'
ERROR   CSSStyleRule: No start { of style declaration found: u'&#13;' [4:32: ;]
ERROR   Selector: Unexpected CHAR. [4:28: &]
ERROR   SelectorList: Invalid Selector: &#13
ERROR   CSSStyleRule: No style declaration or "}" found: u'&#13;'
ERROR   CSSStyleRule: No start { of style declaration found: u'&#13;' [5:34: ;]
ERROR   Selector: Unexpected CHAR. [5:30: &]
ERROR   SelectorList: Invalid Selector: &#13
ERROR   CSSStyleRule: No style declaration or "}" found: u'&#13;'
ERROR   CSSStyleRule: No start { of style declaration found: u'&#13;' [6:34: ;]
ERROR   Selector: Unexpected CHAR. [6:30: &]
ERROR   SelectorList: Invalid Selector: &#13
ERROR   CSSStyleRule: No style declaration or "}" found: u'&#13;'
ERROR   CSSStyleRule: No start { of style declaration found: u'&#13;' [7:53: ;]
ERROR   Selector: Unexpected CHAR. [7:49: &]
ERROR   SelectorList: Invalid Selector: &#13
ERROR   CSSStyleRule: No style declaration or "}" found: u'&#13;'
ERROR   CSSStyleRule: No start { of style declaration found: u'</style>' [8:13: ]
ERROR   Selector: Unexpected CHAR. [8:5: <]
ERROR   Selector: Unexpected CHAR. [8:6: /]
ERROR   Selector: Cannot end with combinator: </style>
ERROR   SelectorList: Invalid Selector: </style>
ERROR   CSSStyleRule: No style declaration or "}" found: u'</style>'
<cssutils.css.CSSStyleSheet object encoding='utf-8' href=None media=None title=None namespaces={} at 0x308ca90>

どうすればこれを解決できますか?

<style type="text/css">&#13;
    p.c6 {font-weight: bold; text-align: left}&#13;
    p.c5 {font-weight: bold}&#13;
    p.c4 {text-align: left}&#13;
    td.c3 {font-weight: bold}&#13;
    p.c2 {text-align: center}&#13;
    p.c1 {font-weight: bold; text-align: center}&#13;
</style>
4

1 に答える 1

0

そのエラーメッセージを取得するために使用しているコードは何ですか?

CSS パーサー (cssutils や tinycss など) は、CSS ソースを提供することを期待しています。HTML<style>要素のソースを提供しているようです。lxml.html を使用してその HTML を解析できます。text次に、関心のあるノードの属性を抽出し、それらを HTML にシリアル化しないでください。

コードは次のようになります。

html = '<style>a.b &#123;}</style>'
lxml.html.fromstring(html)
for style_element in html.xpath('style')
    # lmxl parses HTML entities like &#123;
    assert style_element.text == 'a.b {}'
    stylesheet = cssutils.parseString(style_element.text)
于 2012-11-24T15:18:03.073 に答える