使用 Scrapy View 时出现 TypeError

I got TypeError when using Scrapy View

我正在尝试使用 scrapy view https://www.example.com(不是真正的 link,因为我的工作不允许透露它。抱歉。)来调试 link,但是随后我收到这个错误。

2018-11-01 20:49:29 [twisted] CRITICAL: Unhandled error in Deferred:

2018-11-01 20:49:29 [twisted] CRITICAL:
Traceback (most recent call last):
  File "d:\kerja\hit\python projects\my_project\my_project-env\lib\site-packages\twisted\internet\defer.py", line 1386, in _inlineCallbacks
    result = g.send(result)
  File "d:\kerja\hit\python projects\my_project\my_project-env\lib\site-packages\scrapy\crawler.py", line 98, in crawl
    six.reraise(*exc_info)
  File "d:\kerja\hit\python projects\my_project\my_project-env\lib\site-packages\scrapy\crawler.py", line 79, in crawl
    self.spider = self._create_spider(*args, **kwargs)
  File "d:\kerja\hit\python projects\my_project\my_project-env\lib\site-packages\scrapy\crawler.py", line 102, in _create_spider
    return self.spidercls.from_crawler(self, *args, **kwargs)
  File "d:\kerja\hit\python projects\my_project\my_project-env\lib\site-packages\scrapy\spiders\__init__.py", line 51, in from_crawler
    spider = cls(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'start_requests'
'page' is not recognized as an internal or external command,
operable program or batch file.

如何避免出现该错误?

更新:

我在我的一个 Scrapy 项目中遇到了这个错误,但在使用我的其他 Scrapy 项目时没有遇到任何错误。好像是spider的问题

试试用引号?喜欢scrapy view "https://empireflippers.com/wp-admin/admin-ajax.php?action=ef_listings_paginated&page=1"

1.

如 Elena 所述,您提供的示例命令未被引用。您需要正确处理 & 字符(通过引用命令或至少转义该字符)以将正确的 URL 作为参数传递给 Scrapy。

虽然这是需要解决的问题,但我认为这不是导致您目前 TypeError 的原因。

2.

当处理像scrapy fetchscrapy view这样的命令时,Scrapy需要为任务初始化一个scrapy.Spider实例。

在此过程中,Scrapy会在当前路径下寻找scrapy.cfg文件,并且:

  • 情况A:如果有这样的文件,Scrapy会识别当前工作路径下的项目,并尝试加载scrapy.Spiderclass中已有的
  • 情况B:如果没有,这意味着没有可用的Scrapy项目,Scrapy只会初始化一个默认的scrapy.Spider实例。

根据您分享的日志,您遇到的是案例A。

此外,在处理 scrapy fetch 命令时,Scrapy 会尝试通过蜘蛛参数(相关代码 here)覆盖 start_requests 属性。而且根据你分享的log,你的spider不接受这样的说法。

因此您可以尝试以下任何一种方法:

  • 建议A:将工作目录更改到其他地方,那里没有Scrapy项目(例如cd /tmp/)。然后重试相同的 scrapy fetch 命令。
  • 建议 B:正确处理输入参数(示例如下),然后重试相同的 scrapy fetch 命令。

在任何一种情况下,您可能需要修复 #1 中提到的 scrapy fetch 命令。

3.

上述提案 B 的示例代码:

import scrapy


class TestSpider(scrapy.Spider):
    name = 'test'

    def __init__(self, argument_foo, argument_bar, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # handle your argument "foo" and "bar" here
        # e.g. self.xxx = int(argument_foo)