python - 使用 Scrapy View 时出现 TypeError
问题描述
我正在尝试使用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 项目时我没有收到任何错误。这似乎是蜘蛛的问题。
解决方案
1.
正如 Elena在他/她的回答中提到的那样,您给出的示例命令没有被引用。您需要正确处理&
字符(通过引用命令或至少转义该字符)以将正确的 URL 作为参数传递给 Scrapy。
虽然这是需要解决的问题,但我认为这不是TypeError
您目前遇到的原因。
2.
在处理 and 之类的命令时scrapy fetch
,scrapy view
Scrapy 需要scrapy.Spider
为该任务初始化一个实例。
在此过程中,Scrapy 会scrapy.cfg
在当前路径中查找文件,并且:
- 案例 A:如果有这样的文件,Scrapy 会识别当前工作路径下的项目,并尝试在其中加载现有的
scrapy.Spider
类。 - 案例 B:如果没有,这意味着没有可用的 Scrapy 项目,Scrapy 只会初始化一个默认
scrapy.Spider
实例。
根据您共享的日志,您遇到的是案例 A。
更重要的是,在处理scrapy fetch
命令时,Scrapy 会尝试start_requests
通过蜘蛛参数(相关代码here)覆盖属性。而且根据你分享的日志,你的蜘蛛不接受这样的论点。
因此,您可以尝试以下任何一种方法:
- 建议 A:将工作目录更改到没有 Scrapy 项目的其他地方(例如
cd /tmp/
)。然后重试相同的scrapy fetch
命令。 - 建议 B:正确处理输入参数(下面的示例),然后重试相同的
scrapy fetch
命令。
在任何一种情况下,您都可能需要修复scrapy fetch
#1 中提到的命令。
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)
推荐阅读
- python - 更改 matplotlib 动画中点的颜色
- python - GoogleCloudStorageToBigQueryOperator source_objects 通过 XCom 接收列表
- java - 创建对象时的 Mockito 来自其他类的私有方法
- sap - 在java中过滤JCoTable
- xamarin - Xamarin UITest:正在安装 DeviceAgent,但未运行 .APP 和测试
- c++11 - 无法在结构中返回指针数组
- here-api - HERE-API FindSequence 错误:“之前的约束:必须参考不同的航路点”
- cakephp - 如何在模型中实现 CakePHP 的加解密功能?
- javascript - Word insertOoxml 方法返回错误:所有输入都未知
- java - Mac OS X 上的 Allure 手动配置