Вы можете передать аргументы для сканирования вашего паука, который, я думаю, вам нужен для этой работы.
Измените свой код на:
class FirstSpider(scrapy.Spider):
name = "first_bot"
file_name = 'to_collect_firstbot.csv' # <- we are gonna change this variable later
def start_requests(self):
base_url = "https://example.fr/catalogsearch/result/?q="
script_dir = osp.dirname(osp.realpath(__file__))
file_path = osp.join(script_dir, 'files', self.file_name) # here we use the argument
input_file = open(file_path, 'r', encoding="utf-8", errors="ignore")
reader = csv.reader(input_file)
for row in reader:
if row:
url = row[0]
absolute_url = base_url + url
print(absolute_url)
yield scrapy.Request(
absolute_url,
meta={
"handle_httpstatus_list": [302, 301, 502],
},
callback=self.parse
)
А теперь при запуске вашего паука,просто передайте их в качестве аргументов при вызове процесса сканирования:
def main():
# ----- This part launch all given spiders ----- #
process = CrawlerProcess(get_project_settings())
process.crawl(FirstSpider, file_name='custom_file1.csv')
process.crawl(SecondSpider, file_name='custom_file2.csv')
process.crawl(ThirdSpider)
process.crawl(EtcSpider, file_name='custom_file_whatever.csv')
process.start() # the script will block here until the crawling is finished
Убедитесь, что третий вызов не устанавливает аргумент file_name
, что означает, что паук будет использовать по умолчанию, указанный в коде паука:
file_name = 'to_collect_firstbot.csv'