1.
Как упомянуло Еленой в своем ответе , образец команды, который вы дали, не был указан. Вам нужно будет правильно обработать символ &
(путем цитирования команды или хотя бы экранирования этого символа), чтобы передать правильный URL-адрес Scrapy в качестве аргумента.
Хотя это и нужно решить, но я не думаю, что это причина того, что TypeError
у вас сейчас есть.
2.
При обработке таких команд, как scrapy fetch
и scrapy view
, Scrapy потребуется инициализировать экземпляр scrapy.Spider
для задачи.
Во время этого процесса Scrapy будет искать файл scrapy.cfg
по текущему пути и:
- Случай A: если такой файл существует, Scrapy распознает проект по текущему рабочему пути и попытается загрузить существующий класс
scrapy.Spider
в.
- Случай B: если нет, то есть нет доступного проекта Scrapy, Scrapy просто инициализирует экземпляр
scrapy.Spider
по умолчанию.
Согласно журналу, которым вы поделились, это случай А, который вы имеете.
Более того, при обработке команды scrapy fetch
Scrapy попытается переопределить атрибут start_requests
с помощью аргументов паука (связанный код здесь ). И согласно журналу, которым вы поделились, ваш паук не принимает такой аргумент.
Таким образом, вы можете попробовать любой из следующих подходов:
- Предложение 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)