我在用0.20.2的小子弹。
$ scrapy shell "http://newyork.craigslist.org/ata/"
我想让所有链接到广告网页的列表设置分开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'>]
我想使用XPathmatches()
函数来匹配[0-9]+.html
正则表达式形式的链接。
$ sel.xpath('//a[matches(@href,"[0-9]+.html")]')
...
ValueError: Invalid XPath: //a[matches(@href,"[0-9]+.html")]
你怎么了?
2条答案
按热度按时间xesrikrc1#
matches
是一个XPath 2.0函数,而scrapy只支持XPath 1.0(它没有内置任何正则表达式支持)。您必须使用scrapy选择器提取 all 链接,然后在Python级别而不是在XPath中进行正则表达式过滤。rjee0c152#
对于此特殊用例,有一个使用
translate(...)
的XPath 1.0解决方法:translate(...)
调用删除扩展名.html
之前的所有数字。第二行检查确保.html
被排除(点之前没有任何内容),最后一行检查确保.html
实际上是文件扩展名。