eri*_*kcw 6 python lxml beautifulsoup
我正在将一些html解析代码从BeautifulSoup转换为lxml.我正在尝试找出以下BeautifullSoup语句的lxml等效语法:
soup.find('a', {'class': ['current zzt', 'zzt']})
Run Code Online (Sandbox Code Playgroud)
基本上我想在文档中找到所有"a"标签,它们的类属性为"current zzt"或"zzt".BeautifulSoup允许人们传入列表,字典甚至常规快递来执行匹配.
什么是lxml等价物?
谢谢!
不,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]
Run Code Online (Sandbox Code Playgroud)
好的,soup.find('a')确实会像您期望的那样首先找到一个元素或 None 。问题是,它似乎不支持 CSSSelector 所需的丰富 XPath 语法。