Scrapy i proxy
Jak wykorzystać wsparcie proxy z python web-scraping framework Scrappy?
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
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
-
Włącz
HttpProxyMiddleware
w twoimsettings.py
, tak:DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1 }
-
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
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 ?
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
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).
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"
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"
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