如何在Scrapy中設置輪換Proxy
Scrapy內置的HttpProxyMiddleware從request.meta中讀取proxy。使用輪換網關時,你只需設置一個URL,每個請求仍會獲得新的IP。
步驟
- 保持HttpProxyMiddleware啟用(默認啟用)
- 在每個請求上設置meta={"proxy": url},或在start_requests中設置
- 將用戶名和密碼放入代理URL中
- 如果網站仍然限制速率,請降低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替換為控制台Proxies頁面上的proxy登錄信息。端口10000是住宅HTTP;請查看下方每個產品的端口。
提示
- 關閉IMAGES_ENABLED並避免下載媒體以節省GB
- 設置DOWNLOAD_TIMEOUT為30和RETRY_TIMES為3以保持穩定運行
常見問題
我需要旋轉中間件嗎?
不需要。網關會為您旋轉;一個代理URL就足夠了。