scrapy 和 xpath 函数“匹配”语法

Mic*_*Hua 3 regex xpath scrapy

我正在运行scrapy 0.20.2。

$ scrapy shell "http://newyork.craigslist.org/ata/"
Run Code Online (Sandbox Code Playgroud)

我想将所有指向广告页面的链接列表与 index.html 分开

$ sel.xpath('//a[contains(@href,html)]')
... 
<Selector xpath='//a[contains(@href,"html")]' data=u'<a href="/mnh/atq/4243973984.html">Wicke'>,
<Selector xpath='//a[contains(@href,"html")]' data=u'<a href="/mnh/atd/4257230057.html" class'>,
<Selector xpath='//a[contains(@href,"html")]' data=u'<a href="/mnh/atd/4257230057.html">Recla'>,
<Selector xpath='//a[contains(@href,"html")]' data=u'<a href="/ata/index100.html" class="butt'>]
Run Code Online (Sandbox Code Playgroud)

我想使用 XPath 匹配函数来匹配 regex 形式的链接[0-9]+.html

$ sel.xpath('//a[matches(@href,"[0-9]+.html")]')
...
ValueError: Invalid XPath: //a[matches(@href,"[0-9]+.html")]
Run Code Online (Sandbox Code Playgroud)

怎么了?谢谢你。

Ian*_*rts 5

matches是一个 XPath 2.0 函数,scrapy 只支持 XPath 1.0(它没有任何内置的正则表达式支持)。您必须使用scrapy 选择器提取所有链接,然后在Python 级别而不是在XPath 中进行正则表达式过滤。