是否可以像在BeautifulSoup中一样,在Scrapy中通过正则表达式找到元素



我想返回所有具有满足正则表达式的特定文本的元素。就像在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

最新更新