这是我蜘蛛的一部分:
def parse(self, response):
titles = HtmlXPathSelector(response).select('//li')
for title in titles:
item = EksidefeItem()
item['favori'] = title.select("//*[@id='entry-list']/li/@data-favorite-count").extract()
item['entry'] = ['<a href=https://eksisozluk.com%s'%a for a in title.select("//*[@class='entry-date permalink']/@href").extract()]
item['yazari'] = title.select("//*[@id='entry-list']/li/@data-author").extract()
item['basligi'] = title.select("//*[@id='topic']/h1/@data-title").extract()
item['tarih'] = title.select("//*[@id='entry-list']/li/footer/div[2]/a[1]/text()").extract()
return item
我从item['tarih']
获取日期和时间,但是它的确切日期和时间内还有其他值。以下是从中解析数据的示例:
26.01.2017 20:04~20:07
我想只使用日期部分(左起10个字符)作为
2017年1月26日
我该怎么做?
由于
答案 0 :(得分:1)
考虑使用item loaders。您可以扩展ItemLoader类并编写自己的自定义项加载器。
from scrapy.loader import ItemLoader
from scrapy.loader.processors import TakeFirst, MapCompose
def tarih_modifier(value):
return value[:10]
class MyCustomLoader(ItemLoader):
default_output_processor = TakeFirst()
tarih_in = MapCompose(tarih_modifier)
您也可以在单独的模块中编写此类。现在在parse方法中,您可以使用此加载器类。
def parse(self, response):
l = MyCustomLoader(item=EksidefeItem(), response=response)
l.add_xpath('name', "//*[@id='entry-list']/li/footer/div[2]/a[1]/text()")
# add the rest
return l.load_item()
使用loader类将比定制值更方便。
答案 1 :(得分:0)
您可以使用字符串切片来获取日期:
item['tarih'] = title.select("//*[@id='entry-list']/li/footer/div[2]/a[1]/text()").extract()
item['tarih'][0] = item['tarih'][0][:10]
但我还会添加一些验证(请查看datetime.datetime.strptime()
)以确保您有一个有效的日期。