6

いくつかのhtml解析コードをBeautifulSoupからlxmlに変換しています。次のBeautifulSoupステートメントのlxmlと同等の構文を理解しようとしています。

soup.find('a', {'class': ['current zzt', 'zzt']})

基本的に、「currentzzt」または「zzt」のいずれかのクラス属性を持つドキュメント内のすべての「a」タグを検索したいと思います。BeautifulSoupを使用すると、リスト、辞書、または正規表現を渡して一致を実行できます。

lxmlに相当するものは何ですか?

ありがとう!

4

1 に答える 1

3

いいえ、lxmlは、探している「最初に検索するか、Noneを返す」メソッドを提供していません。必要に応じて使用する(select(soup) or [None])[0]か、関数を作成してください。

#!/usr/bin/python
import lxml.html
import lxml.cssselect
soup = lxml.html.fromstring("""
        <html>
        <a href="foo" class="yyy zzz" />
        <a href="bar" class="yyy" />
        <a href="baz" class="zzz" />
        <a href="quux" class="zzz yyy" />
        <a href="warble" class="qqq" />
        <p class="yyy zzz">Hello</p>
        </html>""")

select = lxml.cssselect.CSSSelector("a.yyy.zzz, a.yyy")
print [lxml.html.tostring(s).strip() for s in select(soup)]
print (select(soup) or [None])[0]

さて、soup.find('a')あなたが期待するように、確かに最初に要素またはNoneを見つけるでしょう。問題は、CSSSelectorに必要な豊富なXPath構文をサポートしていないようです。

于 2009-09-15T19:57:42.803 に答える