18

質問

Pythonとlxmlを使用してhtmlからクラス属性を削除するにはどうすればよいですか?

私は持っている:

<p class="DumbClass">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>

私が欲しい:

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>

これまでに試したこと

lxml.html.clean.Cleanerをチェックアウトしましたが、クラス属性を削除するメソッドがありません。設定できますsafe_attrs_only=Trueが、これはクラス属性を削除しません。

かなりの検索を行っても、実行可能なものは何も見つかりませんでした。classhtml と python の両方で使用されているという事実は、検索結果をさらに混乱させると思います。結果の多くは、xml も厳密に扱っているようです。

私は、人道的なインターフェースを提供する他の python モジュールにもオープンです。

どうもありがとう。


解決

以下の@Dan Robertsの回答のおかげで、次の解決策を思いつきました。同じ問題を解決しようとして、将来ここに到着する人々のために提示されます。

import lxml.html

# Our html string we want to remove the class attribute from
html_string = '<p class="DumbClass">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>'

# Parse the html
html = lxml.html.fromstring(html_string)

# Print out our "Before"
print lxml.html.tostring(html)

# .xpath below gives us a list of all elements that have a class attribute
# xpath syntax explained:
# // = select all tags that match our expression regardless of location in doc
# * = match any tag
# [@class] = match all class attributes
for tag in html.xpath('//*[@class]'):
    # For each element with a class attribute, remove that class attribute
    tag.attrib.pop('class')

# Print out our "After"
print lxml.html.tostring(html)
4

3 に答える 3

17

現時点でこれをテストすることはできませんが、これは一般的な考えのようです

for tag in node.xpath('//*[@class]'):
    tag.attrib.pop('class')
于 2012-04-05T23:27:48.810 に答える