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(., '[')], '['), ',') |
关于第二个问题,你可以使用
ZZU1
输出
1 2 | 2015-05-15 00:00:00 <type 'datetime.datetime'> |
在XPAT表达式和/或
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'] |
或者,这是当你使用
1 2 | In [2]: response.xpath("p[last()]/text()[contains(., '[')]").re(r"\d+ \w+ \d{4}") Out[2]: [u'15 May 2015'] |