Як наладзіць і ратаваць проксі ў Python Scrapy
Updated:
Асінхронны рухавік Twisted у Scrapy мае ўбудаваны HttpProxyMiddleware (з прыярытэтам 750), які разбірае радкі http://user:pass@ip:port, прызначаныя ў request.meta['proxy']. Напісанне ўласнага Downloader Middleware у 10 радкоў з прыярытэтам 740 дазваляе вашым павукам аўтаматычна ратаваць проксі праз пул статычных IP VinaProxy без абмежавання трафіка.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40 000 ₫
- Ад 5 IP35 000 ₫
- Ад 10 IP25 000 ₫
- Ад 20 IP25 000 ₫
- Ад 50 IP25 000 ₫
- Ад 100 IP25 000 ₫
- Ад 200 IP25 000 ₫
- Ад 500 IP25 000 ₫
- Ад 1000 IP22 000 ₫
- Ад 2000 IP20 000 ₫
- 1 IP40 000 ₫
- Ад 5 IP35 000 ₫
- Ад 10 IP25 000 ₫
- Ад 20 IP25 000 ₫
- Ад 50 IP25 000 ₫
- Ад 100 IP25 000 ₫
- Ад 200 IP25 000 ₫
- Ад 500 IP25 000 ₫
- Ад 1000 IP22 000 ₫
- Ад 2000 IP20 000 ₫
Парадак middleware для проксі і налады паралельнасці ў Scrapy
Паколькі HttpProxyMiddleware працуе з прыярытэтам 750, каб выдаліць user:pass з URL проксі і закадзіраваць загаловак Proxy-Authorization, любы карыстальніцкі middleware, які задае request.meta['proxy'], павінен выконвацца з меншым нумарам (напрыклад, 740):
| Налада Scrapy | Рэкамендаванае значэнне | Прызначэнне |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | Накіроўвае запыт праз указаны проксі VinaProxy |
| Middleware Priority | 740 (перад 750) | Гарантуе, што HttpProxyMiddleware закадзіруе загаловак user:pass |
CONCURRENT_REQUESTS_PER_IP | Ад 2 да 4 | Абмяжоўвае колькасць адначасовых сокетаў на IP проксі, каб пазбегнуць HTTP 429 |
AUTOTHROTTLE_ENABLED | True | Дынамічна карэктуе затрымку сканавання на аснове затрымкі адказу мэтавага сайта |
Найлепшыя практыкі для маштабнага збору даных у Scrapy
- Загружайце спіс проксі VinaProxy у
from_crawler()і прызначайцеrequest.meta['proxy'] = random.choice(self.proxies)унутрыprocess_request() - Уключыце
RANDOMIZE_DOWNLOAD_DELAY = Trueразам зDOWNLOAD_DELAY = 1.0, каб інтэрвалы запытаў для кожнага IP не выглядалі рабатызаванымі - Пры паўторы запыту (
429або503) выбірайце іншы проксі з пула перад паўторнай адпраўкай у чаргу
Крок за крокам
- 1
Адфарматуйце ваш пул проксі як http://user:pass@ip:port
Устаўце ваш спіс VinaProxy у наш Канвертар фарматаў проксі, каб атрымаць радкі URL.
- 2
Стварыце ProxyPoolMiddleware у middlewares.py
Вызначце
process_request(self, request, spider), каб задацьrequest.meta['proxy'] = random.choice(self.proxies). - 3
Зарэгіструйце з прыярытэтам 740 у settings.py
Дадайце
'myproject.middlewares.ProxyPoolMiddleware': 740уDOWNLOADER_MIDDLEWARESі задайцеCONCURRENT_REQUESTS_PER_IP = 2. - 4
Пратэстуйце праз scrapy shell або scrapy crawl
Выканайце тэставы запыт да
https://vinaproxy.com/api/my-ip, каб праверыць ратацыю і аўтэнтыфікацыю.
Частыя пытанні
Чаму мой карыстальніцкі middleware для проксі ў Scrapy не спрацаваў з прыярытэтам 800?
Убудаваны HttpProxyMiddleware у Scrapy працуе з прыярытэтам 750. Калі ваш middleware запускаецца з прыярытэтам 800 (пасля 750), убудаваныя ўліковыя даныя user:pass ніколі не пераўтворацца ў загаловак Proxy-Authorization. Заўсёды задавайце прыярытэт вашага middleware ніжэй за 750 (напрыклад, 740).
Ці падтрымлівае Scrapy пастаянныя злучэнні адкрытымі для кожнага проксі?
Так. Пул злучэнняў Twisted падтрымлівае пастаянныя злучэнні keep-alive для кожнага канчатковага вузла проксі.
Ці з'яўляюцца проксі VinaProxy безлімітнымі для задач Scrapy на мільёны старонак?
Так. Усе тарыфныя планы Dedicated IPv4 і Static ISP уключаюць неабмежаваную штомесячную прапускную здольнасць.
Маштабуйце павукоў Scrapy з пуламі статычных IP без ліміту
Імгненны масавы доступ да проксі Dedicated IPv4 і Static ISP у 7 краінах.
Купіць проксі для Scrapy