首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scrapy: scrapy不调用回调

Scrapy: scrapy不调用回调
EN

Stack Overflow用户
提问于 2021-11-08 04:27:32
回答 1查看 56关注 0票数 1

我正在尝试使用scrapy编写一个接受输入参数的刮板。init方法如下:

代码语言:javascript
复制
 def __init__(self, inputfile="input.csv", *args, **kwargs):

        super(DemoSpider, self).__init__(*args, **kwargs)

        custom_settings = {
            'ITEM_PIPELINES': {
                'ScrapySpider.pipelines.PostProcessingHtml': 300,
                'ScrapySpider.pipelines.GetShortDesc': 301,
                # 'ScrapySpider.pipelines.Database': 302
            }
        }
        #Reading input file to get the input data
        InputData = ReadParamsFromCSV(inputfile)
        start_urls = []
        rules = []
        for i in range(0, len(InputData)):
            # for i in range(1, 2):
            start_urls += [InputData[i][0]]
            rules.append(
                Rule(LinkExtractor(allow=InputData[i][1]),
                     callback='parse_items',
                     cb_kwargs={'InputData': InputData[i]},
                     follow=True))

此代码不会回调parse_items函数。这里我漏掉了什么?我找不到很多关于init方法本身的细节,所以我不确定我应该在这里返回什么。

EN

回答 1

Stack Overflow用户

发布于 2021-11-09 11:44:51

你需要在“超级”之前设置规则。

另外,custom_settings和start_urls需要是一个类属性。

(您也可以更新custom_settings,但是如果您不需要动态更改它,那么将它从init函数中删除会更容易)。

代码语言:javascript
复制
custom_settings = {
    'ITEM_PIPELINES': {
        'ScrapySpider.pipelines.PostProcessingHtml': 300,
        'ScrapySpider.pipelines.GetShortDesc': 301,
        # 'ScrapySpider.pipelines.Database': 302
        }
    }

 def __init__(self, inputfile="input.csv", *args, **kwargs):
    #Reading input file to get the input data
    InputData = ReadParamsFromCSV(inputfile)
    self.start_urls = []
    rules = []
    for i in range(0, len(InputData)):
        # for i in range(1, 2):
        self.start_urls += [InputData[i][0]]
        rules.append(
            Rule(LinkExtractor(allow=InputData[i][1]),
                 callback='parse_items',
                 cb_kwargs={'InputData': InputData[i]},
                 follow=True))
                 
    super(DemoSpider, self).__init__(*args, **kwargs)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69878664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档