使用scrapy,如何获得部分xpath解析结果?

2024-04-20 02:00:46 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的蜘蛛部分:

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个字符)作为

26.01.2017

我该怎么做?你知道吗

谢谢


Tags: inidfordatatitleresponseextractli
2条回答

考虑使用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方法中可以使用这个loader类。你知道吗

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类将比自定义值更方便。你知道吗

您可以使用字符串切片来获取日期:

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()),以确保您得到一个有效的日期。你知道吗

相关问题 更多 >