关于python:xpath提取特定字符之间的日期并用作日期

Xpath extract dates between certain characters AND use as dates

更新:关于我的第二个问题(如何在MySQL中将字符串转换为日期格式),我找到了一种方法并想分享它:

1)将"字符串日期"数据保存为varchar(不使用文本)

2)当以php或其他方式显示mysql数据时,使用str_to_date函数(字符串日期列,日期格式),如下例:

1
$sql ="SELECT * FROM yourtablename ORDER BY str_to_date(string-date-column, '%d %M %Y')";

我用Scrapy收集数据,写入数据库。从网站上,每个项目的发布日期如下:

1
2
3
4
5
6
7
8
<p>
   #This is the last <p>
 within each

[15 May 2015, #9789]


</p>

所以日期总是在"["后面,在","之前。我使用以下xpath代码提取:

1
sel.xpath("p[last()]/text()[contains(., '[')]").extract()

但我会得到整条线:

1
[15 May 2015, #9789]

那么,如何才能只得到"2015年5月15日"的部分呢?如果可以这样做,如何将刮削后的字符串(2015年5月15日)转换为实时数据,以便用于排序?谢谢!


考虑到第一个问题,假设一个时间内最多有一个日期,你可以使用XPAT EDOCX1和EDOCX1的组合,以获得EDOCX1&2的功能:

1
substring-before(substring-after(p[last()]/text()[contains(., '[')], '['), ',')

关于第二个问题,你可以使用datetime.strptime()来convert string to datetime

ZZU1

输出

1
2
2015-05-15 00:00:00
<type 'datetime.datetime'>


在XPAT表达式和/或.re()中,一种更"文字"的方法将使用常规表达支持。

This is with both applied:

1
2
In [1]: response.xpath("p[last()]/text()[re:test(., '\[\d+ \w+ \d{4}\, #\d+\]')]").re(r"\d+ \w+ \d{4}")
Out[1]: [u'15 May 2015']

或者,这是当你使用.re()

1
2
In [2]: response.xpath("p[last()]/text()[contains(., '[')]").re(r"\d+ \w+ \d{4}")
Out[2]: [u'15 May 2015']