首页 > 解决方案 > 是否可以像在 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 实现这一目标?

标签: pythonbeautifulsoupscrapy

解决方案


您可以使用 EXSLT 扩展在 xpath 中使用正则表达式函数。

来自scrapy docs

在 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

推荐阅读