支持XPath的库有哪些?是否有完整的实现?图书馆是如何使用的?它的网站在哪里?
当前回答
使用LXML。LXML使用了libxml2和libxslt的全部功能,但将它们包装在更多的“Python”绑定中,而不是这些库的原生Python绑定。因此,它获得了完整的XPath 1.0实现。Native ElemenTree支持有限的XPath子集,尽管它可能已经足够满足您的需求。
其他回答
另一个选项是py-dom-xpath,它与minidom无缝合作,是纯Python,所以可以在appengine上工作。
import xpath
xpath.find('//item', doc)
使用LXML。LXML使用了libxml2和libxslt的全部功能,但将它们包装在更多的“Python”绑定中,而不是这些库的原生Python绑定。因此,它获得了完整的XPath 1.0实现。Native ElemenTree支持有限的XPath子集,尽管它可能已经足够满足您的需求。
如果你想拥有XPATH的强大功能,同时还能在任何时候使用CSS,你可以使用parsel:
>>> from parsel import Selector
>>> sel = Selector(text=u"""<html>
<body>
<h1>Hello, Parsel!</h1>
<ul>
<li><a href="http://example.com">Link 1</a></li>
<li><a href="http://scrapy.org">Link 2</a></li>
</ul
</body>
</html>""")
>>>
>>> sel.css('h1::text').extract_first()
'Hello, Parsel!'
>>> sel.xpath('//h1/text()').extract_first()
'Hello, Parsel!'
lxml包支持xpath。它似乎工作得很好,尽管我在使用self::轴时遇到了一些麻烦。还有阿玛拉,但我个人没用过。
听起来像是lxml的广告。,)ElementTree包含在std库中。在2.6及以下,它的xpath相当弱,但在2.7+和3。X大大提高:
import xml.etree.ElementTree as ET
root = ET.parse(filename)
result = ''
for elem in root.findall('.//child/grandchild'):
# How to make decisions based on attributes:
if elem.attrib.get('name') == 'foo':
result = elem.text
break
推荐文章
- 检查是否选择了jQuery选项,如果没有选择默认值
- 如何在Flask-SQLAlchemy中按id删除记录
- 在Python中插入列表的第一个位置
- Python Pandas只合并某些列
- 如何在一行中连接两个集而不使用“|”
- 从字符串中移除前缀
- 代码结束时发出警报
- 如何在Python中按字母顺序排序字符串中的字母
- 在matplotlib中将y轴标签添加到次要y轴
- 如何消除数独方块的凹凸缺陷?
- 为什么出现这个UnboundLocalError(闭包)?
- 使用Python请求的异步请求
- JavaScript DOM删除元素
- 如何检查一个对象是否是python中的生成器对象?
- 如何从Python包内读取(静态)文件?