For the complete documentation index, see llms.txt. This page is also available as Markdown.

Scrapy

将 Scrapy 与 Oxylabs 代理集成,以使用简单的分步指南构建快速的异步网页爬虫。

Scrapy 是一个开源 Python 框架,专为大规模网页抓取和数据提取而设计。默认情况下,Scrapy 会直接从你的本地网络路由请求。

按照以下步骤集成下面的 Oxylabs 代理:

1

选择集成方式

Scrapy 支持通过代理路由请求的两种主要方法: 请求 Meta 参数 (按请求配置)和 自定义下载中间件 (全项目配置)。

方法 1:请求 Meta 参数

将代理认证详情直接传入单个 scrapy.Request 实例,通过 meta 字典。此方法适合简单爬虫,或当不同请求需要特定代理配置时使用。

import scrapy

class OxylabsSpider(scrapy.Spider):
    name = "oxylabs_spider"
    
    def start_requests(self):
        url = "https://ip.oxylabs.io/"
        proxy = "http://username:password@host:port"
        
        yield scrapy.Request(
            url=url,
            callback=self.parse,
            meta={"proxy": proxy}
        )

    def parse(self, response):
        ip_address = response.css("pre::text").get()
        self.logger.info(f"通过 Oxylabs 代理已连接。当前 IP: {ip_address}")

方法 2:自定义下载中间件(推荐)

若要在不修改爬虫代码的情况下自动将代理应用到所有请求,请实现一个自定义 Scrapy 下载中间件。

打开 Scrapy 项目的 middlewares.py 文件,并添加 OxylabsProxyMiddleware 类:

class OxylabsProxyMiddleware:
    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings)

    def __init__(self, settings):
        self.username = settings.get("OXYLABS_USERNAME")
        self.password = settings.get("OXYLABS_PASSWORD")
        self.endpoint = settings.get("OXYLABS_ENDPOINT")

    def process_request(self, request, spider):
        host = f"http://{self.username}:{self.password}@{self.endpoint}"
        request.meta["proxy"] = host

然后,注册该中间件,并在 settings.py:

# Oxylabs Credentials
OXYLABS_USERNAME = "username"
OXYLABS_PASSWORD = "password"
OXYLABS_ENDPOINT = "host:port"

# Enable Downloader Middleware
DOWNLOADER_MIDDLEWARES = {
    "myproject.middlewares.OxylabsProxyMiddleware": 100,
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 110,
}
2

配置你的代理

调整代理详情和 Oxylabs 代理用户凭据(在 Oxylabs 控制面板中创建)以匹配你选择的代理类型:

住宅代理和移动代理

主机: pr.oxylabs.io

端口: 7777

用户名: customer-username

密码: password

你还可以使用 附加参数 搭配住宅代理和移动代理来设置地理位置(国家/地区、州、省、市等)并控制会话。查看 住宅代理文档 了解更多。下表概述了可用参数及其示例值。

代理参数
示例

国家入口节点

主机: us-pr.oxylabs.io

端口: 10000

国家/地区

用户: customer-username-cc-US

用户: customer-username-st-US_texas

城市

用户: customer-username-city-paris

用户: customer-username-cn-NA

ZIP/邮政编码

用户: customer-username-cc-US-postalcode-90210

ASN 定向

用户: customer-username-ASN-21928

会话 (最长 1440 分钟)

用户: customer-username-sessid-qwerty123-sesstime-1440

黏性会话

主机: us-pr.oxylabs.io

端口: 10001

数据中心代理

主机: dc.oxylabs.io

端口: 8001

用户名: user-userername

密码: password

端口是从 代理列表的 IP 地址的顺序编号。因此,端口 8001 将始终使用你列表中的第一个 IP 地址。你也可以通过将端口设置为 代理 IP 轮换 来启用 8000.

此外,你可以指定 地理位置,例如美国,方法是将 代理用户名 设置为 user-USERNAME-country-US.

该端口 8001 会随机选择一个 IP 地址,但在会话期间保持一致。或者,你可以通过使用端口 轮换代理 IP 来在每个请求中更换 IP 8000.

如果你想使用特定的 地理位置,例如美国,请将代理用户名设置为 user-USERNAME-country-US.

独享数据中心代理(企业版)

主机: 1.2.3.4 (来自你的 代理列表)

端口: 60000 (HTTP)或 1180 (SOCKS5)

用户名: username

密码: password

对于企业版独享数据中心代理(通过销售团队购买),你需要从已获取的 代理列表.

独享数据中心代理(自助服务版)

主机: ddc.oxylabs.io

端口: 8001

用户名: user-userername

密码: password

对于自助式独享数据中心代理(通过 Oxylabs 仪表盘购买),端口表示从已获取的 代理列表的 IP 地址的顺序编号。如果你希望每个请求都获得不同的 IP,请将端口改为 8000 以启用 代理轮换.

ISP代理

主机: isp.oxylabs.io

端口: 8001

用户名: user-username

密码: password

对于 ISP 代理,端口会分配给一个特定的 IP 地址及其位置。因此,端口 8001 将始终选择你 代理列表.

中的第一个 IP。如果你希望每个请求都获得不同的 IP,请将端口改为 8000 以启用 代理轮换.

独享ISP代理

主机: disp.oxylabs.io

端口: 8001

用户名: user-USERNAME

密码: PASSWORD

您需要选择分配给所购买的 IP 地址的端口 代理列表,你可以在 Oxylabs 仪表盘上找到。 8001 端口会为所有请求从你的列表中选择第一个 IP 地址。使用端口 8000 可自动进行 代理 IP 轮换.

3

执行爬虫

使用 crawl 命令运行你的 Scrapy 爬虫:

scrapy crawl oxylabs_spider

如果配置正确,Scrapy 将通过 Oxylabs 代理网关执行请求,并记录分配的外部出口 IP 地址。

最后更新于

这有帮助吗?