როგორ გავმართოთ პროქსები და მათი როტაცია Python Scrapy-ში
Updated:
Scrapy-ს ასინქრონული Twisted ძრავა შეიცავს ჩაშენებულ HttpProxyMiddleware-ს (პრიორიტეტით 750), რომელიც ამუშავებს request.meta['proxy']-ზე მინიჭებულ http://user:pass@ip:port სტრიქონებს. 10-ხაზიანი მორგებული Downloader Middleware-ის შექმნა 740 პრიორიტეტით თქვენს სპაიდერებს საშუალებას აძლევს, ავტომატურად განახორციელონ როტაცია VinaProxy-ის ულიმიტო სტატიკური IP-ების პულში.
request.meta['proxy'] = 'http://user:pass@ip:port'- 1 IP40 000 VND
- 5+ IP35 000 VND
- 10+ IP25 000 VND
- 20+ IP25 000 VND
- 50+ IP25 000 VND
- 100+ IP25 000 VND
- 200+ IP25 000 VND
- 500+ IP25 000 VND
- 1000+ IP22 000 VND
- 2000+ IP20 000 VND
- 1 IP40 000 VND
- 5+ IP35 000 VND
- 10+ IP25 000 VND
- 20+ IP25 000 VND
- 50+ IP25 000 VND
- 100+ IP25 000 VND
- 200+ IP25 000 VND
- 500+ IP25 000 VND
- 1000+ IP22 000 VND
- 2000+ IP20 000 VND
Scrapy-ს პროქსი middleware-ის რიგითობა და ერთდროულობის პარამეტრები
ვინაიდან HttpProxyMiddleware ეშვება 750 რიგითობით, რათა ამოიღოს user:pass პროქსის URL-იდან და დააკოდიროს Proxy-Authorization ჰედერი, ნებისმიერი მორგებული middleware, რომელიც ანიჭებს request.meta['proxy']-ს, უნდა გაეშვას უფრო დაბალი ნომრით (მაგ. 740):
| Scrapy-ს პარამეტრი | რეკომენდებული მნიშვნელობა | დანიშნულება |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | მოთხოვნას ატარებს მითითებულ VinaProxy პროქსიში |
| Middleware-ის პრიორიტეტი | 740 (750-მდე) | უზრუნველყოფს, რომ HttpProxyMiddleware-მა დააკოდიროს user:pass ჰედერი |
CONCURRENT_REQUESTS_PER_IP | 2-დან 4-მდე | ზღუდავს ერთდროულ სოკეტებს თითო პროქსი IP-ზე HTTP 429-ის თავიდან ასაცილებლად |
AUTOTHROTTLE_ENABLED | True | დინამიკურად არგებს crawl-ის დაყოვნებას სამიზნის რეაგირების დროზე დაყრდნობით |
საუკეთესო პრაქტიკა დიდი მოცულობის Scrapy crawl-ისთვის
- ჩატვირთეთ თქვენი 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 სია ჩვენს Proxy Format Converter-ში 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როტაციისა და ავთენტიფიკაციის შესამოწმებლად.
ხშირად დასმული კითხვები
რატომ არ იმუშავა ჩემმა მორგებულმა Scrapy პროქსი middleware-მა 800 პრიორიტეტზე დაყენებისას?
Scrapy-ს ჩაშენებული HttpProxyMiddleware ეშვება 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 პროქსები