Как передать класс в scrapy spider
'''
class MainSpider(scrapy.Spider):
name = "main"
def add_progress(self, value):
value = float(self.progress.text.replace('%', '')) + value
self.progress.text = f'{value}%'
def start_requests(self, **kwargs):
self.query = ast.literal_eval(self.query)
self.pages = int(self.pages)
self.rules = ast.literal_eval(self.rules)
print(self.a.value)
q = self.query['start']
for page in range(self.pages):
url = f'{self.url}/{self.query["name"]}{q}'
q += self.query['step']
yield scrapy.Request(url, callback=self.parse)
def parse(self, response, **kwargs):
soup = BeautifulSoup(response.text, 'html.parser')
self.add_progress(round(100 / self.pages, 1))
if self.rules['parse_mode'] == 'manual':
for proxy in get_proxies_by_rules(soup, self.rules, self.url):
print(proxy)
elif self.rules['parse_mode'] == 'automatic':
for proxy in get_ip_port_from_text(soup.text):
print(proxy)
def run_spider(url, query, rules, pages, progress):
class A:
value = '123'
a = A()
temp_dir = os.getcwd()
os.chdir('/home/black/Projects/web_parsers/ip_parser/logic/parsers/medium_parser/medium_parser/spiders/')
command = f'scrapy crawl main -a url="{url}" -a query="{query}" -a rules="{rules}" ' \
f'-a pages={pages} -a progress="{a}"'
os.system(command)
os.chdir(temp_dir)
'''
Допустим, я хочу передать класс А в MainSpider. Как мне это сделать. Через CrawlerProcess не подойдет, мне нужно чтоб код запускался паралельно основному сценарию. При запуске данного кода я получаю ошибку AttributeError: 'MainSpider' object has no attribute 'a'