วิธีตั้งค่า Rotating Proxy ใน Scrapy
HttpProxyMiddleware ที่มีอยู่แล้วใน Scrapy อ่าน proxy จาก request.meta ด้วยเกตเวย์หมุนเวียน คุณตั้งค่า URL หนึ่งรายการและทุกคำขอยังคงได้รับ IP ใหม่
ขั้นตอน
- เปิดใช้งาน HttpProxyMiddleware (เปิดโดยค่าเริ่มต้น)
- ตั้งค่า meta={"proxy": url} ในแต่ละคำขอ หรือใน start_requests
- ใส่ username และ password ใน URL ของ proxy
- ลด CONCURRENT_REQUESTS_PER_DOMAIN หากเว็บไซต์ยังจำกัดอัตรา
ตัวอย่างโค้ด
import scrapy
PROXY = "http://USERNAME-cc-gb:PASSWORD@gw.gbproxies.cc:10000"
class PricesSpider(scrapy.Spider):
name = "prices"
start_urls = ["https://example.com/catalog"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, meta={"proxy": PROXY})
def parse(self, response):
for href in response.css("a.product::attr(href)").getall():
yield response.follow(href, self.parse_item, meta={"proxy": PROXY})
def parse_item(self, response):
yield {"title": response.css("h1::text").get(), "url": response.url}แทนที่ USERNAME และ PASSWORD ด้วยข้อมูลเข้าสู่ระบบ proxy จากหน้า Proxies ของคอนโซล พอร์ต 10000 คือ residential HTTP; ดูพอร์ตของทุกผลิตภัณฑ์ด้านล่าง
เคล็ดลับ
- ตั้ง IMAGES_ENABLED เป็น off และหลีกเลี่ยงการดาวน์โหลดสื่อเพื่อประหยัด GB
- ใช้ DOWNLOAD_TIMEOUT 30 และ RETRY_TIMES 3 เพื่อการทำงานที่มั่นคง
คำถามทั่วไป
ฉันต้องการ middleware สำหรับการหมุน IP หรือไม่?
ไม่จำเป็น Gateway จะหมุน IP ให้คุณ แค่ใช้ URL proxy หนึ่งอันก็พอ