Python 在Scrapy中使用规则和请求会引发异常TypeError:\uuuu init\uuuuu()为关键字参数“callback”获取多个值

Python 在Scrapy中使用规则和请求会引发异常TypeError:\uuuu init\uuuuu()为关键字参数“callback”获取多个值,python,scrapy,Python,Scrapy,我是scrapy的初学者,我一直在尝试以下工作流程:从页面a开始,这是一个结果搜索页面,包含url结尾为数字的完整文章的链接。我的意图是抓住每个搜索结果页面的每个链接,访问链接并删除全文 我使用以下规则在每个页面上迭代收集链接: rules = (Rule(SgmlLinkExtractor(allow=(r'\d+',)), callback='parse_short_story',follow=True),) 每一个都确保在我收集完链接并删除当前页面的完整文章后,搜索页面的最后一位数

我是scrapy的初学者,我一直在尝试以下工作流程:从页面a开始,这是一个结果搜索页面,包含url结尾为数字的完整文章的链接。我的意图是抓住每个搜索结果页面的每个链接,访问链接并删除全文

我使用以下规则在每个页面上迭代收集链接:

   rules = (Rule(SgmlLinkExtractor(allow=(r'\d+',)), callback='parse_short_story',follow=True),)
每一个都确保在我收集完链接并删除当前页面的完整文章后,搜索页面的最后一位数字会迭代到下一位

parse_short_story方法仅使用一个select来过滤html页面的部分,然后在剩余部分上循环以获取完整故事的链接,并将其传递给请求:

for short_story in short_stories:
        item = DmozItem()

        full_story_link = short_story.select(".//h2/a/@href").extract()

        if full_story_link:
            yield Request(full_story_link, self.parse_full_story, callback='self.parse_full_story', errback=lambda _: item, meta=dict(item=item),)            

        items.append(item)
    return items     
根据我对scrapy的理解,我需要在解析器方法结束时返回项,以便规则正确地附加到最终的项列表中,我可以在控制台运行时将其放入json文件或其他内容中。请注意下面这部分的响应和返回调用,它们会崩溃。我不知道如何使用请求和返回项

方法parse_full_story像parse_short_story一样获取响应参数,并恢复我作为参数发送的项

    item = response.meta.get('item')
在正确设置我想要的物品信息后,我使用退货物品

总之

我的期望是,该规则将使用parse_short_story的回调处理包含全文链接的搜索页面,而对于每个页面的每个链接,parse_full_story将访问这些链接的全文,删除我想要的内容,添加到项目中,然后退出,希望在最后扫描所有完整的文章

显然,我的理解是错误的,我得到了错误: 产生Requestfull\u story\u链接,self.parse\u full\u story,callback='self.parse\u full\u story',errback=lambda\uu:item,meta=dictitem=item, exceptions.TypeError:\uuuuu init\uuuuuuu为关键字参数“callback”获取了多个值
您可以找到完整的可运行代码。当它运行时,您将看到它不断抛出异常。如果可以执行直接修复并给出/或简短解释这方面的错误,我将不胜感激,因为类似的问题会导致我在web上遇到Django相关的问题。

只放置一个回调参数,使用self.parse_full_story请求期望可调用

回调名称字符串版本仅适用于规则

使用

而不是

yield Request(full_story_link,
    self.parse_full_story, callback='self.parse_full_story',
    errback=lambda _: item,
    meta=dict(item=item),
)
yield Request(full_story_link,
    self.parse_full_story, callback='self.parse_full_story',
    errback=lambda _: item,
    meta=dict(item=item),
)