Подтвердить что ты не робот

Scrapy и прокси

Как вы используете поддержку прокси-сервера с фреймворком python для веб-скрипинга?

4b9b3361

Ответ 1

Из Часто задаваемые вопросы по Scrapy,

Работает ли Scrapy с HTTP-прокси?

Да. Поддержка HTTP-прокси предоставляется (начиная с Scrapy 0.8) через промежуточное ПО HTTP-прокси-загрузчика. См. HttpProxyMiddleware.

Самый простой способ использования прокси - установить переменную среды http_proxy. Как это делается, зависит от вашей оболочки.

C:\>set http_proxy=http://proxy:port
csh% setenv http_proxy http://proxy:port
sh$ export http_proxy=http://proxy:port

если вы хотите использовать прокси https и посетили https web, чтобы установить переменную среды http_proxy, вы должны следовать ниже,

C:\>set https_proxy=https://proxy:port
csh% setenv https_proxy https://proxy:port
sh$ export https_proxy=https://proxy:port

Ответ 2

Один прокси

  1. Включите HttpProxyMiddleware в вашем settings.py, например так:

    DOWNLOADER_MIDDLEWARES = {
        'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1
    }
    
  2. передать прокси для запроса через request.meta:

    request = Request(url="http://example.com")
    request.meta['proxy'] = "host:port"
    yield request
    

Вы также можете выбрать адрес прокси случайным образом, если у вас есть пул адресов. Как это:

Несколько прокси

class MySpider(BaseSpider):
    name = "my_spider"
    def __init__(self, *args, **kwargs):
        super(MySpider, self).__init__(*args, **kwargs)
        self.proxy_pool = ['proxy_address1', 'proxy_address2', ..., 'proxy_addressN']

    def parse(self, response):
        ...parse code...
        if something:
            yield self.get_request(url)

    def get_request(self, url):
        req = Request(url=url)
        if self.proxy_pool:
            req.meta['proxy'] = random.choice(self.proxy_pool)
        return req

Ответ 3

1. Создайте новый файл под названием "middlewares.py" и сохраните его в своем проекте scrapy и добавьте к нему следующий код.

import base64
class ProxyMiddleware(object):
    # overwrite process request
    def process_request(self, request, spider):
        # Set the location of the proxy
        request.meta['proxy'] = "http://YOUR_PROXY_IP:PORT"

        # Use the following lines if your proxy requires authentication
        proxy_user_pass = "USERNAME:PASSWORD"
        # setup basic authentication for the proxy
        encoded_user_pass = base64.encodestring(proxy_user_pass)
        request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass

2 - Откройте файл конфигурации проектов (./project_name/settings.py) и добавьте следующий код

DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110,
    'project_name.middlewares.ProxyMiddleware': 100,
}

Теперь ваши запросы должны быть переданы этим прокси. Простой, не так ли?

Ответ 4

который будет:

export http_proxy = http://user: password @proxy: port

Ответ 5

Существует хорошее промежуточное программное обеспечение, написанное кем-то [1]: https://github.com/aivarsk/scrapy-proxies "Средство промежуточного прокси-сервера"

Ответ 6

В Windows я собрал пару предыдущих ответов, и это сработало. Я просто сделал:

C:>  set http_proxy = http://username:[email protected]:port

а затем я запустил свою программу:

C:/.../RightFolder> scrapy crawl dmoz

где "dmzo" - это имя программы (я пишу его, потому что это тот, который вы найдете в учебнике по Интернету, и если вы здесь, вы, вероятно, начали с учебника).

Ответ 7

Как мне не удалось установить среду в /etc/environment, вот что я добавил в мой паук (Python):

os.environ["http_proxy"] = "http://localhost:12345"

Ответ 8

Я бы порекомендовал вам использовать промежуточное ПО, такое как scrapy-прокси. Вы можете вращать прокси, фильтровать плохие прокси или использовать один прокси для всех ваших запросов. Кроме того, использование промежуточного программного обеспечения избавит вас от необходимости настраивать прокси при каждом запуске.

Это прямо из GitHub README.

  • Установить библиотеку прокси-вращающегося прокси

    pip install scrapy_proxies

  • В вашем settings.py добавьте следующие настройки

# Retry many times since proxies often fail
RETRY_TIMES = 10
# Retry on most error codes since proxies fail for different reasons
RETRY_HTTP_CODES = [500, 503, 504, 400, 403, 404, 408]

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 90,
    'scrapy_proxies.RandomProxy': 100,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}

# Proxy list containing entries like
# http://host1:port
# http://username:[email protected]:port
# http://host3:port
# ...
PROXY_LIST = '/path/to/proxy/list.txt'

# Proxy mode
# 0 = Every requests have different proxy
# 1 = Take only one proxy from the list and assign it to every requests
# 2 = Put a custom proxy to use in the settings
PROXY_MODE = 0

# If proxy mode is 2 uncomment this sentence :
#CUSTOM_PROXY = "http://host1:port"

Здесь вы можете изменить время повторения, установить одиночный или вращающийся прокси

  • Затем добавьте свой прокси в файл list.txt, как этот
.
http://host1:port
http://username:[email protected]:port
http://host3:port

После этого все ваши запросы на этот проект будут отправлены через прокси. Прокси вращается для каждого запроса в случайном порядке. Это не повлияет на параллелизм.

Примечание: если вы не хотите использовать прокси. Вы можете просто прокомментировать строку промежуточного программного обеспечения scrapy_proxy.

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 90,
#    'scrapy_proxies.RandomProxy': 100,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}

Счастливого ползания !!!