关于php:如何在scrapy spider中更改“日期字符串”的格式

How to change format of “date string” in scrapy spider

我正在用Scrapy搜索几个网站。一个问题是"Post-Date"项目在不同的网站上有不同的格式,例如"06/01/2015"和"2015年6月1日"。我想知道如何将日期字符串从"06/01/2015"转换为"1 June 2015",这将使日期字符串在MySQL中具有相同的格式。

假设网站上的日期如下:

1
06/01/2015

下面是Scrapy Spider中的Parse函数:

1
2
3
4
5
6
7
8
9
def parse(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//*')    

for site in sites:
il = ExampleItemLoader(response=response, selector=site)          
il.add_xpath('post_date', 'div[@class="date"]/text()')
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^
yield il.load_item()

上述代码成功地将日期字符串收集为"06/01/2015"。另一方面,当我试图用下面的代码将日期字符串转换为"2015年6月1日"时,它不起作用。

1
2
il.add_xpath('post_date', 'datetime.datetime.strptime(div[@class="date"]/text(),"%m/%d/%Y").strftime("%d %B %Y")')
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我收到错误消息如下:

1
 exceptions.ValueError: Invalid XPath:

还是应该使用"替换值"在xpath之后转换格式?如假设代码如下:

1
2
3
il.add_xpath('post_date', 'div[@class="date"]/text()')
il.replace_value('post_date', 'datetime.datetime.strptime("old post_date value","%m/%d/%Y").strftime("%d %B %Y")')
                                                          ^^^^^^^^^^^^^^^^^^^^^

这可以用残废的蜘蛛做吗?谢谢!


在阅读了Scrapy文档和测试之后,我提出了一个解决方案以及解决方法:

1
2
il.add_xpath('post_date', 'div[@class="date"]/text()')
il.replace_value('post_date', datetime.datetime.strptime(il.get_collected_values('post_date')[0],"%m/%d/%Y").strftime("%d %B %Y"))

我得到的输出是:

1
01 June 2015

说明:il.get_collected_values("post_date")是从il.add_xpath()获取收集的值,它是一个值为"[U'06/01/2015']的"列表"。我尝试了il.get_collected_values(‘post_date’)[0],它成功地将"06/01/2015"从列表中删除。

il.replace_value("post_date")将新值分配给刚刚收集的"post_date"。