使用Scrapy在Python中提取文本字段的一部分

3 投票
1 回答
2164 浏览
提问于 2025-04-17 22:32

我用Scrapy做了一个网页抓取工具。现在我想提取一些内容:

Friday March 14, 2014

当我用这个方法抓取这个div里的内容时(里面没有段落标签或者其他我能更具体定位的东西):

item['published'] = hxs.select('//div[@class="date"]/text()').extract()

结果是这样的:

\n    \n        Last Updated: Friday, March 14, 2014 \n        ", "\n            ", "\n            \n            ", "\n            ", "\n", "            \n    

那么在这个例子中,我该怎么去掉“Friday”之前和“2014”之后的所有内容呢?我花了好几个小时在尝试一些正则表达式,但就是找不到一个合适的例子来处理字母而不是数字,或者更糟的是,有些内容并没有固定的空格和范围,因为有时候它写的是“Last Updated:”而有时候是“Updated:”,这让我感觉很困惑。

1 个回答

4

你可以用正则表达式从字符串中提取日期,举个例子:

>>> import re
>>> s = '\n    \n        Last Updated: Friday, March 14, 2014 \n        ", "\n '
>>> re.search('Updated: ([\w, ]+)', s).group(1).strip()
'Friday, March 14, 2014'

这里的 ([\w, ]+) 是一个捕获组,它可以匹配一个或多个字母、数字(还有 _)、逗号或者空格。

希望这能帮到你。

撰写回答