Ошибка 503 при очистке диска cdiscount (scrapy) Python - PullRequest
0 голосов
/ 19 октября 2018

Я сделал паука, который работает для сбора данных на сайте cdiscount.Однако каждый раз, когда я скребу более 320 страниц категории, у меня появляется ошибка 503. Паук закрывается.

Как решить эту проблему?Я пытался изменить пользовательский агент и использовать прокси-пул, как это:

def __init__(self, *args, **kwargs):
    super(CdiscountSpider, self).__init__(*args, **kwargs)
    self.proxy_pool = ['49.236.220.238:52840',  '181.112.41.50:33381', '50.235.111.161:45126']

(...)

       request = scrapy.Request(url, callback=self.parse_dir_contents) #on accède au contenu des catégories
       request.meta["proxy"] = random.choice(self.proxy_pool)
       yield request

, но это не сработало.Пожалуйста, любая помощь с благодарностью:)

1 Ответ

0 голосов
/ 19 октября 2018

У вас может быть промежуточное ПО для загрузки, которое повторяет попытку с новым прокси-сервером URL-адреса с 503 ответом до тех пор, пока они не будут успешно очищены

создайте файл с именем custom_middleware.py

import random
import logging

class CustomMiddleware(object):

    proxy_pool = ['49.236.220.238:52840',  '181.112.41.50:33381', '50.235.111.161:45126']

    def process_request(self, request, spider):

        request.meta['proxy'] = “http://“ + random.choice(self.proxy_pool)


    def process_response(self, request, response, spider):

        if response.status in [503]:
            logging.error("%s found for %s so retrying"%(response.status, response.url))
            req = request.copy()
            req.dont_filter = True
            req.meta['proxy'] =  “http://“ + random.choice(self.proxy_pool)
            return req
        else:
            return response

а в вашем settings.py просто включите это промежуточное ПО

DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 1,
    'YOUR_PROJECT_PATH.custom_middleware.CustomMiddleware': 200,
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...