Scrapy / получить данные из функции start_requests для анализа функции - PullRequest
0 голосов
/ 27 ноября 2018

Я постараюсь сделать это как можно более понятным.У меня бот ползет по ebay.Каждый запрошенный URL создается из первой строки CSV-файла, как вы можете видеть в функции start_requests.

def start_requests(self):
    base_url_1 = "https://www.ebay.fr/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw="
    base_url_2 = "&_sacat=0"
    script_dir = osp.dirname(osp.realpath(__file__))
    file_path = osp.join(script_dir, 'files', 'start_file_ebay.csv')
    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_1 + url + base_url_2
            print(absolute_url)
            yield scrapy.Request(
                absolute_url,
                meta={
                    'dont_redirect': True,
                    "handle_httpstatus_list": [302, 301]
                },
                callback=self.parse
            )

Первая строка этого файла на самом деле является кодом продукта.

Я хотел бы повторно использовать этот код продукта в моей функции синтаксического анализа, каждый раз, когда он вызывается.

Я бы получил что-то вроде:

def parse(self, response):
    (...)
    item = {}
    item['product_code'] = "" # TOOK FROM START_REQUESTS
    item['price'] =  "" # TOOK FROM WEBSITE 

Как этого добиться?Спасибо!

1 Ответ

0 голосов
/ 27 ноября 2018

Попробуйте позвонить в start_requests:

yield scrapy.Request(
            absolute_url,
            meta={
                'dont_redirect': True,
                'handle_httpstatus_list': [302, 301],
                'product_code': url,  # <- pass variable here
            },
            callback=self.parse
        )

А затем в parse функция: item['product_code'] = response.meta.get('product_code')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...