私はtree.xpath
を使用して興味深いHTML要素をすべて反復処理しますが、現在の要素が特定のCSSクラスの一部であるかどうかを判断できる必要があります。python lxml - 単純にHTML要素のクラスを取得/確認します
from lxml import html
mypage = """
<div class="otherclass exampleclass">some</div>
<div class="otherclass">things</div>
<div class="exampleclass">are</div>
<div class="otherclass">better</div>
<div>left</div>"""
tree = html.fromstring(mypage)
for item in tree.xpath("//div"):
print("testing")
#if "exampleclass" in item.getListOfClasses():
# print("foo")
#else:
# print("bar")
全体の構造は同じにしてください。
現在div
にexampleclass
クラスがあるかどうかを確認するにはどうすればよいですか?上記の例では
、item
プロパティclasses
を持っているが、私はこれが何を意味するのか理解していないlxml.html.HtmlElement
クラスのものである:
クラス
「クラスの周りのセットのようなラッパー属性。メソッドを取得します。
unreachable.classes(self)
- 「クラス」属性の周りのセットのようなラッパー。設定方法:
unreachable.classes(self, classes)
それは__iter__
メソッドを持つlxml.html.Classes
オブジェクトを返し、それがiter()
作品が判明します。だから私はこのコードを構築する:
for item in tree.xpath("//div")
match = False
for classname in iter(item.classes):
if classname == "exampleclass":
match = True
if match:
print("foo")
else:
print("bar")
しかし、私はもっと洗練された方法があると思っています。
私は同様の質問を探してみましたが、私が見つけたのはさまざまでした。「どのように 'classname'の要素をすべて得るのですか?」と私はすべてdiv
が必要ですが、ちょっと違います。
ニース、ありがとう。私はセレクタを使うことはできません。なぜなら、ループ内でクラスの有無にかかわらず 'div'sが必要であり、うまくいけばサンプルコードを更新する必要があるからです。 'exampleclass-numbertwo'クラスが存在する場合、' xpath'' contains'は問題になります。http://stackoverflow.com/a/1604480/188159 – qubodup
@qubodupを参照してください。場合*。あなたは複数のクラスを探していますか、それともその単一のクラスだけを探していますか? –