scrapy 2.3 正则表达式
这个 test()
例如,当xpath的 starts-with()
或 contains()
还不够。
在列表项中选择“class”属性以数字结尾的链接的示例:
>>> from scrapy import Selector
>>> doc = """
... <div>
... <ul>
... <li class="item-0"><a href="link1.html">first item</a></li>
... <li class="item-1"><a href="link2.html">second item</a></li>
... <li class="item-inactive"><a href="link3.html">third item</a></li>
... <li class="item-1"><a href="link4.html">fourth item</a></li>
... <li class="item-0"><a href="link5.html">fifth item</a></li>
... </ul>
... </div>
... """
>>> sel = Selector(text=doc, type="html")
>>> sel.xpath('//li//@href').getall()
['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
>>> sel.xpath('//li[re:test(@class, "item-\d$")]//@href').getall()
['link1.html', 'link2.html', 'link4.html', 'link5.html']
警告
C库 libxslt
本机不支持exslt正则表达式,因此 lxml 的实现使用了对python的钩子 re
模块。因此,在xpath表达式中使用regexp函数可能会增加一点性能损失。