【问题标题】:I got TypeError when using Scrapy View使用 Scrapy View 时出现 TypeError
【发布时间】:2019-04-05 18:14:21
【问题描述】:

我正在尝试使用scrapy view https://www.example.com(不是真正的链接,因为我的工作不允许公开它。对不起。)调试链接,但后来我收到了这个错误。

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 项目时我没有收到任何错误。这似乎是蜘蛛的一个问题。

【问题讨论】:

  • 顺便说一句,网页抓取专家女士,您检查过scrapinghub.com/jobs 吗? :)
  • @starrify 我对此很感兴趣。我申请了一次,但没有被录取。如果有机会,我会很感兴趣。你在那里工作吗?

标签: python web-scraping scrapy screen-scraping scrapy-shell


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    1.

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

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

    2.

    在处理scrapy fetch 和scrapy view 之类的命令时,Scrapy 需要为该任务初始化一个scrapy.Spider 实例。

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

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

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

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

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

    • 建议 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)
    

    【讨论】:

    • 完美!谢谢!
    猜你喜欢
    • 2022-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多