วิธีตั้งค่าและหมุนเวียนพร็อกซีใน Python Scrapy
อัปเดตเมื่อ:
เอนจิน 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 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
- 1 IP₫40,000
- 5+ IP₫35,000
- 10+ IP₫25,000
- 20+ IP₫25,000
- 50+ IP₫25,000
- 100+ IP₫25,000
- 200+ IP₫25,000
- 500+ IP₫25,000
- 1000+ IP₫22,000
- 2000+ IP₫20,000
ลำดับมิดเดิลแวร์พร็อกซีและการควบคุมความพร้อมกันใน Scrapy
เนื่องจาก HttpProxyMiddleware ทำงานที่ลำดับความสำคัญ 750 เพื่อถอด user:pass ออกจาก URL และแปลงเป็นเฮดเดอร์ Proxy-Authorization ดังนั้นมิดเดิลแวร์ที่กำหนดค่า request.meta['proxy'] จึงต้องทำงานที่ตัวเลขต่ำกว่า (เช่น 740):
| การตั้งค่าใน Scrapy | ค่าที่แนะนำ | บทบาทหน้าที่ทางเทคนิค |
|---|---|---|
request.meta['proxy'] | 'http://user:pass@ip:port' | กำหนดให้คำขอส่งผ่านพร็อกซี VinaProxy ตามที่ระบุ |
| ลำดับความสำคัญ Middleware | 740 (ก่อน 750) | ช่วยให้มั่นใจว่า HttpProxyMiddleware จะนำข้อมูลล็อกอินไปแปลงเป็นเฮดเดอร์ได้ทัน |
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เพื่อตรวจสอบการหมุนเวียน IP และการยืนยันตัวตน
คำถามที่พบบ่อย
ทำไมมิดเดิลแวร์พร็อกซีที่กำหนดเองใน Scrapy ถึงไม่ทำงานเมื่อตั้งลำดับความสำคัญไว้ที่ 800?
HttpProxyMiddleware ในตัวของ Scrapy ทำงานที่ลำดับความสำคัญ 750 หากคุณตั้งมิดเดิลแวร์ไว้ที่ 800 (หลัง 750) ค่า user:pass จะไม่ถูกแปลงเป็นเฮดเดอร์ Proxy-Authorization จึงต้องตั้งค่าให้ต่ำกว่า 750 เสมอ (เช่น 740)
Scrapy มีการรักษาการเชื่อมต่อแบบต่อเนื่อง (Keep-Alive) ไปยังพร็อกซีแต่ละตัวหรือไม่?
ใช่ พูลการเชื่อมต่อของ Twisted จะรักษาการเชื่อมต่อ TCP keep-alive อย่างต่อเนื่องสำหรับแต่ละเอนด์พอยต์ ช่วยประหยัดเวลาในการสร้างการเชื่อมต่อใหม่
พร็อกซี VinaProxy มีการคิดปริมาณข้อมูลเมื่อดึงข้อมูลเป็นล้านๆ หน้าใน Scrapy หรือไม่?
ไม่มี ทุกแพ็กเกจ Dedicated IPv4 และ Static ISP ของ VinaProxy มาพร้อมปริมาณการใช้งานแบบไม่จำกัดต่อเดือน
ขยายสเกล Scrapy Spider ด้วยพูล IP แบบคงที่ใช้งานได้ไม่จำกัด
Dedicated IPv4 และ Static ISP พร็อกซียกชุดใน 7 ประเทศ พร้อมเปิดใช้งานได้ทันที
ซื้อพร็อกซีสำหรับ Scrapy