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"。