更新:关于我的第二个问题(如何在MySQL中将字符串转换为日期格式),我找到了一种方法并希望分享它:
1)保存"字符串日期"数据为VARCHAR(不要使用TEXT)
2)以PHP或其他方式显示MySQL数据时,请使用 str_to_date (string-date-column, date-format )的功能,如下所示例如:
$sql = "SELECT * FROM yourtablename ORDER BY str_to_date(string-date-column, '%d %M %Y')";
我正在使用scrapy收集数据,写入数据库。从网站上看,每个项目的发布日期如下:
<p> #This is the last <p> within each <div>
<br>
[15 May 2015, #9789]
<br>
</p>
所以日期总是落后于&#34; [&#34;在&#34; ,&#34;之前。我使用以下xpath代码来提取:
sel.xpath("p[last()]/text()[contains(., '[')]").extract()
但我会全线:
[15 May 2015, #9789]
那么,如何只获得&#34; 2015年5月15日&#34;?如果可以这样做,如何将刮下的字符串(2015年5月15日)转换为真正的DATE数据,那么它可以用于排序?非常感谢!
答案 0 :(得分:2)
关于第一个问题,假设一次最多有一个日期,您可以结合使用XPath substring-after()
和substring-before()
函数来获取文本节点的15 May 2015
部分:
substring-before(substring-after(p[last()]/text()[contains(., '[')], '['), ',')
关于第二个问题,您可以使用datetime.strptime()
将字符串转换为datetime
:
import datetime
result = datetime.datetime.strptime("15 May 2015", "%d %b %Y")
print(result)
print(type(result))
输出
2015-05-15 00:00:00
<type 'datetime.datetime'>
答案 1 :(得分:1)
更多&#34;克莱克&#34;方法将涉及在XPath表达式中使用built-in regular expression support和/或.re()
。
这适用于:
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()
提取定位元素的日期时:
In [2]: response.xpath("p[last()]/text()[contains(., '[')]").re(r"\d+ \w+ \d{4}")
Out[2]: [u'15 May 2015']