lxml, эквивалентный BeautifulSoup “ИЛИ” синтаксису?

Отвечать на Ваш исходный вопрос:
def namestr(obj, namespace):
    return [name for name in namespace if namespace[name] is obj]

Пример:

>>> a = 'some var'
>>> namestr(a, globals())
['a']

Как @rbright уже указал независимо от того, что Вы делаете существуют, вероятно, лучшие способы сделать это.

6
задан erikcw 5 September 2009 в 23:04
поделиться

1 ответ

Нет, lxml не предоставляет метод «сначала найти или не вернуть», который вы ищете. Просто используйте (выберите (суп) или [Нет]) [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, как и следовало ожидать. Проблема в том, что, похоже, он не поддерживает богатый синтаксис XPath, необходимый для CSSSelector.

3
ответ дан 17 December 2019 в 18:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: