如何在Scrapy中设置轮换代理
Scrapy内置的HttpProxyMiddleware从request.meta中读取代理。使用轮换网关时,你只需设置一个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替换为控制台代理页面中的登录信息。端口10000是住宅HTTP代理;请查看下方每个产品的端口。
提示
- 关闭IMAGES_ENABLED并避免媒体下载以节省GB
- 设置DOWNLOAD_TIMEOUT为30,RETRY_TIMES为3,以确保稳定运行
常见问题
我需要轮换中间件吗?
不需要。网关会为您轮换;一个代理URL就足够了。