Scrapy i proxy

Jak wykorzystać wsparcie proxy z python web-scraping framework Scrappy?

Author: bdd, 2011-01-17

7 answers

Z Scrapy FAQ ,

Czy Scrapy działa z proxy HTTP?

Tak. Obsługa proxy HTTP jest dostarczana (od Scrapy 0.8) poprzez oprogramowanie pośredniczące HTTP Proxy downloader. Zobacz też HttpProxyMiddleware.

Najprostszym sposobem użycia proxy jest ustawienie zmiennej środowiskowej http_proxy. Jak to jest zrobione zależy od powłoki.

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

Jeśli chcesz używać HTTPS proxy i odwiedzać https web, aby ustawić zmienną środowiskową http_proxy powinieneś poniżej,

C:\>set https_proxy=https://proxy:port
csh% setenv https_proxy https://proxy:port
sh$ export https_proxy=https://proxy:port
 39
Author: ephemient,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-08 14:48:40

Single Proxy

  1. Włącz HttpProxyMiddleware w twoim settings.py, tak:

    DOWNLOADER_MIDDLEWARES = {
        'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1
    }
    
  2. Podaj proxy do żądania poprzez request.meta:

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

Możesz również wybrać losowo adres proxy, jeśli masz pulę adresów. Tak:

Wiele Proxy

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
 33
Author: Amom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-25 07:33:34

1-Utwórz nowy plik o nazwie "middlewares.py" i zapisz go w swoim scrapowym projekcie i dodaj do niego następujący kod.

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-Otwórz plik konfiguracyjny projektu (. /project_name/settings.py) i dodać następujący kod

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

Teraz Twoje prośby powinny być przekazywane przez tego pełnomocnika. Proste, prawda ?

 22
Author: Shahryar Saljoughi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-17 18:25:47

Czyli:

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

 9
Author: laurent alsina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-18 14:58:29

W Windows zebrałem kilka poprzednich odpowiedzi i zadziałało. Po prostu zrobiłem:

C:>  set http_proxy = http://username:password@proxy:port

A potem uruchomiłem mój program:

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

Gdzie "dmzo" to nazwa programu (piszę ją, ponieważ jest to ta, którą można znaleźć w samouczku w Internecie, a jeśli tu jesteś, prawdopodobnie zacząłeś od samouczka).

 3
Author: Andrea Ianni ௫,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-27 13:20:01

Jest fajny middleware napisany przez kogoś[1]: https://github.com/aivarsk/scrapy-proxies "Scrapy proxy middleware"

 3
Author: Niranjan Sagar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-01 01:58:10

Ponieważ miałem problem z ustawieniem środowiska w /etc / environment, oto co umieściłem w moim spider (Python):

os.environ["http_proxy"] = "http://localhost:12345"
 2
Author: pinkvoid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-18 07:58:32