Я новичок в питоне. Я хочу создать свой собственный экземпляр класса variable_1, variable_2
в классе Scrapy Spider. Следующий код работает хорошо.
class SpiderTest1(scrapy.Spider):
name = 'main run'
url = 'url example' # this class variable working find
variable_1 = 'info_1' # this class variable working find
variable_2 = 'info_2' # this class variable working find
def start_requests(self):
urls = [self.url]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
print (f'some process with {self.variable_1}')
print (f'some prcesss with {self.variable_2}')
# start run the class
process = CrawlerProcess(get_project_settings())
process.crawl(SpiderTest1())
process.start()
Но я хочу сделать экземпляр класса переменным, чтобы мне не приходилось изменять значение переменной внутри паука каждый раз, когда я его запускаю. Я решил создать def __init__(self, url, varialbe_1, variable_2)
в пауке-скрапе, и я ожидаю использовать SpiderTest1(url, variable_1, variable_2)
для его запуска. Ниже приведен новый код, который я ожидаю получить, как и приведенный выше код, но он не работает должным образом:
class SpiderTest1(scrapy.Spider):
name = 'main run'
# the following __init__ are new change, but not working fine
def __init__(self, url, variable_1, variable_2):
self.url = url
self.variable_1 = variable_1
self.variable_2 = variable_2
def start_requests(self):
urls = [self.url]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
print(f'some process with {self.variable_1}')
print(f'some prcesss with {self.variable_2}')
# input values into variables
url = 'url example'
variable_1 = 'info_1'
variable_2 = 'info_2'
# start run the class
process = CrawlerProcess(get_project_settings())
process.crawl(SpiderTest1(url, variable_1, variable_2)) #it seem this code doesn't work
process.start()
Итог:
TypeError: __init__() missing 3 required positional arguments: 'url', 'variable_1', and 'variable_2'
Спасибо, когда кто-нибудь может рассказать, как этого добиться.