我正在使用scrapy框架进行Web抓取项目,但似乎无法弄清楚如何使自定义输出处理器正常工作。

我有一个像这样的物品类:

class Item(scrapy.Item)

    ad_type = scrapy.Field()


然后我的解析函数看起来像这样。我有2个要添加到ad_type的抓取字符串。我希望我的输出处理器功能根据从这2个xpath刮取的内容来分配标签。

def parse(self, response):

    l = ItemLoader(item=Item(), selector=listing)
    l.add_xpath('ad_type', '(.//div/@class)[1]')
    l.add_xpath('ad_type', '(.//div[contains(@class, "brand")]/@class)[1]')
    yield l.load_item()


如何获得我的输出处理器函数来访问添加到ad_type的2个xpath抓取字符串?繁琐的文档给出了此示例,但我无法使其正常工作。

def lowercase_processor(self, values):
    for v in values:
        yield v.lower()

class MyItemLoader(ItemLoader):
    name_in = lowercase_processor

最佳答案

您已将装载程序命名为MyItemLoader,但您的蜘蛛程序使用的是ItemLoader(可能是草皮的)。
如果您更新代码以使用自定义加载程序,则应获得所需的结果。

我也建议不要命名您的项目类Item,因为这可能会造成混淆。

关于python - 拼凑的自定义输出处理器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53384211/

10-12 03:41