GBProxies

如何在Scrapy中设置轮换代理

Scrapy内置的HttpProxyMiddleware从request.meta中读取代理。使用轮换网关时,你只需设置一个URL,每个请求仍会获得新的IP。

步骤

  1. 保持HttpProxyMiddleware启用(默认已启用)
  2. 在每个请求上设置meta={"proxy": url},或在start_requests中设置
  3. 将用户名和密码放入代理URL中
  4. 如果网站仍然限速,请降低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就足够了。

如何在Scrapy中设置轮换代理