我想返回所有具有满足正则表达式的特定文本的元素。就像在BeautifulSoup
data = BeautifulSoup(result.text,'html.parser')
urls = [x.get('href')
for x in data.find(class_='newspaper-mainlisting').findAll('a', text = re.compile('d*[W-]Business'))]
我如何通过Scrapy实现这一点?
您可以使用EXSLT扩展在xpath中使用正则表达式函数。
来自报废文档:
由于构建在lxml之上,Scrapy选择器支持一些EXSLT扩展并附带这些预先注册的名称空间以在XPath中使用表达式:
+--------+--------------------------------------+---------------------+ | prefix | namespace | usage | +--------+--------------------------------------+---------------------+ | re | http://exslt.org/regular-expressions | regular expressions | | set | http://exslt.org/sets | set manipulation | +--------+--------------------------------------+---------------------+
对于您的特定用途,您可能需要这样的东西:
//*[@class='newspaper-mainlisting']//a[re:test(text(), 'd*[W-]Business')]/@href