
Scrapy 代理
将住宅、移动或 ISP 代理接入 Scrapy。通过 NodeMaven 路由每一个请求,自动轮换 IP,定位特定地区,并让凭据保存在代码之外
首个代理
返现
市场上
每月将已用流量
转化为可重复使用的
代理额度,即可获得奖励


欢迎礼
价值 $100+
- 质量 & 速度过滤器
- 邮政编码级定向
- 专属代理专家

仅需 $3.50 即可开始测试高质量代理
如何配置 NodeMaven 代理 在 Scrapy 中
使用项目级下载器中间件,将 NodeMaven HTTP 代理接入 Scrapy。 本示例使用 Books to Scrape,一个专为网页抓取练习打造的沙盒站点
安装 Scrapy 并创建项目
创建并激活 Python 虚拟环境:
python3 -m venv scrapy-env source scrapy-env/bin/activate
安装 Scrapy:
python3 -m pip install scrapy
创建项目和示例爬虫:
scrapy startproject nodemaven_scrapy cd nodemaven_scrapy scrapy genspider books books.toscrape.com
If python3 --version 同样返回“command not found”,请从以下位置安装 Python 3: python.org 首先。

生成一个 NodeMaven 代理
登录到 NodeMaven 仪表板 并打开 代理设置。请选择:
- 代理类型: 住宅、移动或 ISP
- 位置: 选择所需的国家、地区、城市或 ISP
- 会话: 轮换或粘性
- 筛选: 为您的工作流程选择 IP 质量选项
- 协议: HTTP
选择 轮换 适用于希望 NodeMaven 在各次请求之间更换出口 IP 的场景。它非常适合大规模爬取、价格监控和市场调研。
选择 粘性会话 适用于爬虫需要为 cookie、登录、翻页或其他多步骤流程保持同一 IP 的场景。
NodeMaven 在单一网关后台管理 IP 轮换,因此您无需在 Scrapy 中维护单独的代理列表。

安全存储您的 NodeMaven 凭据
复制 完整的代理用户名和密码 来自 NodeMaven Dashboard。
将这些凭据存储为当前终端会话的环境变量,使其保留在 Scrapy 代码之外。这样代理中间件即可使用它们,而无需将敏感信息写入 middlewares.py 或 GitHub。
安全输入您的 NodeMaven 用户名:
read -s -p "NodeMaven proxy username: " NODEMAVEN_PROXY_USER; echo粘贴完整的用户名并按 回车。粘贴的内容不会显示出来。
输入您的代理密码:
read -s -p "NodeMaven proxy password: " NODEMAVEN_PROXY_PASS; echo粘贴密码并按 回车。同样不会显示出来。
导出这两个变量,以便 Scrapy 可以读取:
export NODEMAVEN_PROXY_USER NODEMAVEN_PROXY_PASS在不显示其值的情况下确认两个变量均已设置:
[ -n "$NODEMAVEN_PROXY_USER" ] && echo "NodeMaven username: set" [ -n "$NODEMAVEN_PROXY_PASS" ] && echo "NodeMaven password: set"
您应该会看到:
NodeMaven username: set NodeMaven password: set
重要: 这些变量仅在当前终端会话中有效。如果您关闭终端,请在运行爬虫前重新输入。

添加 NodeMaven 代理中间件
请确认终端位于 Scrapy 项目目录内。命令提示符中应包含 nodemaven_scrapy.
打开项目的 middlewares.py 文件,使用 Nano:
nano nodemaven_scrapy/middlewares.py移动到文件底部,添加一个空行,然后粘贴:
import os from urllib.parse import quote class NodeMavenProxyMiddleware: def __init__(self): username = quote( os.environ["NODEMAVEN_PROXY_USER"], safe="", ) password = quote( os.environ["NODEMAVEN_PROXY_PASS"], safe="", ) self.proxy_url = ( f"http://{username}:{password}" "@gate.nodemaven.com:8080" ) def process_request(self, request): request.meta.setdefault("proxy", self.proxy_url)
重要: 该方法必须写作 __init__,前后各带两个下划线 初始化.
保存并关闭文件:
- 按下 Control + O.
- 按下 回车 以确认文件名。
- 按下 Control + X.
检查文件是否存在语法错误:
python3 -m py_compile nodemaven_scrapy/middlewares.py \ && echo "Middleware syntax check: passed"
如果代码无误,终端将显示:
Middleware syntax check: passed该中间件会读取步骤 3 中保存的凭据,生成带认证信息的 NodeMaven 代理 URL,并将其应用到 Scrapy 请求上。 quote() 函数会安全地对用户名和密码中的特殊字符进行编码。

在 Scrapy 中启用该中间件
请确认终端仍位于 nodemaven_scrapy 项目目录中。
打开项目设置文件:
nano nodemaven_scrapy/settings.py查找是否已存在以下设置:
ROBOTSTXT_OBEY = True如果已经存在,请保持不变,不要重复添加。
移动到文件底部并添加:
DOWNLOADER_MIDDLEWARES = { "nodemaven_scrapy.middlewares.NodeMavenProxyMiddleware": 700, } HTTPPROXY_ENABLED = True
如果您的项目包名不同,请将 nodemaven_scrapy 替换为该名称。对于步骤 1 中创建的项目,请完全保留所示的值。
保存并关闭文件:
- 按下 Control + O.
- 按下 回车 以确认文件名。
- 按下 Control + X.
检查文件是否存在 Python 语法错误:
python3 -m py_compile nodemaven_scrapy/settings.py \ && echo "Settings syntax check: passed"
确认 Scrapy 已加载相关设置:
scrapy settings --get DOWNLOADER_MIDDLEWARES scrapy settings --get HTTPPROXY_ENABLED scrapy settings --get ROBOTSTXT_OBEY
输出内容应包含 NodeMaven 中间件,并显示 True 这两项设置均为:
{'nodemaven_scrapy.middlewares.NodeMavenProxyMiddleware': 700} True True
Scrapy 内置的 HttpProxyMiddleware 会从以下位置读取代理 URL: request.meta["proxy"]。第 4 步中添加的自定义中间件负责提供 NodeMaven 代理 URL。
请根据目标网站设置合理的下载延迟和并发限制。

创建示例爬虫
请确保终端位于 nodemaven_scrapy 项目目录中。
打开生成的爬虫文件:
nano nodemaven_scrapy/spiders/books.pyNano 将显示第 1 步中创建的基础爬虫。
删除现有代码:
- 将光标移动到第一行。
- 按下 Control + K 反复按键,直到删除所有行。
将以下代码粘贴到空文件中:
import scrapy class BooksSpider(scrapy.Spider): name = "books" allowed_domains = ["books.toscrape.com"] start_urls = ["https://books.toscrape.com/"] def parse(self, response): for book in response.css("article.product_pod"): yield { "title": book.css( "h3 a::attr(title)" ).get(), "price": book.css( ".price_color::text" ).get(), "availability": " ".join( book.css( ".availability::text" ).getall() ).strip(), }
保存并关闭文件:
- 按下 Control + O.
- 按下 回车 以确认文件名。
- 按下 Control + X.
检查爬虫是否存在语法错误:
python3 -m py_compile nodemaven_scrapy/spiders/books.py \ && echo "Spider syntax check: passed"
确认 Scrapy 能够识别该爬虫:
scrapy list终端应显示:
爬虫语法检查:通过books
该示例爬虫会打开 Books to Scrape,并提取每本书的:
- 标题
- 价格
- 可用性
我们使用 https://books.toscrape.com/ 仅作为示例。这是一个专为演示网页抓取而创建的沙盒网站。
在实际项目中,请将 URL 和提取规则替换为您的目标网站,并确保您有权访问和抓取该网站。
截图: 该 books.py 文件,其中显示了示例 URL 以及标题、价格和库存状态的选择器,同时还包含 爬虫语法检查:通过 确认。

通过 NodeMaven 运行爬虫
在 Scrapy 项目目录中运行:
scrapy crawl books -O books.json该 -O 选项会创建 books.json 如果文件已存在,则会覆盖它。
Scrapy 会将爬虫的请求通过 gate.nodemaven.com 路由,并使用生成的 NodeMaven 用户名中包含的位置和会话设置。
等待抓取完成。运行成功时应显示:
- An HTTP 200 响应
- 日志中提取到的图书条目
- 无代理连接错误
- 否 407 需要代理身份验证 错误
- A 爬虫已关闭(已完成) 消息
- A books.json 项目目录中的文件

检查 Scrapy 输出
本次抓取会创建 books.json 位于 Scrapy 项目目录内。
确认该文件已存在:
ls -lh books.json显示提取到的记录数量,并预览前三条:
python3 -c 'import json; data=json.load(open("books.json")); print(f"Total records: {len(data)}"); print(json.dumps(data[:3], indent=2, ensure_ascii=False))'
输出应包含以下图书记录:
- 标题
- 价格
- 可用性
抓取顺利完成、导出记录且没有代理认证错误,即可确认 Scrapy 已接受 NodeMaven 的代理配置。
如果爬虫返回 407 错误,请确认:
- 已完整复制 NodeMaven 用户名
- 密码正确
- HTTP 端口与控制面板一致
- Scrapy 可以读取这些环境变量
- 凭据中的保留字符已进行 URL 编码
您的 NodeMaven 代理现已接入 Scrapy。

仅需 3.50 美元即可试用适配 Scrapy 的优质代理,并获得 750MB 流量
轻松集成代理 适用于 Python 抓取
在 Scrapy、Python Requests、Selenium 及其他 Python 网页抓取工具中,使用同一个 NodeMaven 网关和带认证的代理 URL。只需按各个库调整集成方式,NodeMaven 凭据中选定的地区和会话策略保持不变












选择 适用于 Scrapy 工作流的高级代理
使用干净、稳定的 NodeMaven IP 运行 Scrapy 爬虫,实现可扩展抓取、按地区采集数据和持久会话
移动代理
真实 4G、5G 和 LTE IP,适用于移动端优先的目标站点,以及对 IP 信誉要求更严格的工作流
来自客户与合作伙伴的评价
来自信赖并使用 NodeMaven 的用户的真实反馈




常见问题
Scrapy 代理会将爬虫请求通过另一个 IP 地址转发。Scrapy 的 HttpProxyMiddleware 可以从 request.meta["proxy"] 或 http_proxy 与 https_proxy 环境变量中读取代理 URL。
在 NodeMaven 中生成一个 HTTP 代理,将完整的用户名和密码保存在环境变量中,然后使用下载器中间件把带认证信息的 URL 赋给 request.meta["proxy"]。Scrapy 内置的 HttpProxyMiddleware 会负责处理连接。
在 NodeMaven 代理设置中将会话类型选择为 Rotating(轮换)。Scrapy 始终使用同一个 NodeMaven 网关 URL,由 NodeMaven 负责出口 IP 的轮换。这样您就无需另行维护公共代理列表。
使用 轮换会话 适用于大范围爬取和 IP 多样性需求。对于 cookie、登录、购物车、分页流程等需要保持同一 IP 的多请求流程,请使用粘性会话。
选择 美国 在 NodeMaven 代理设置中,选择轮换住宅代理或移动代理会话,并将生成的完整用户名复制到集成配置中。逐步提升 Scrapy 并发量,遵守目标网站的规则,监控响应状态码,并在合适的情况下使用下载延迟或 AutoThrottle。
可以。一个 HTTP 代理 URL 既可用于 HTTP 目标 URL,也可用于 HTTPS 目标 URL。因此,本指南中的 NodeMaven 代理 URL 始终以 http:// 开头,即使爬虫访问的是 https:// 页面。
是否支持 SOCKS5 取决于当前启用的 Scrapy 下载处理器。Scrapy 最新文档说明,HttpxDownloadHandler 支持 SOCKS 代理,而其他内置处理器则不支持。对于本指南中的标准配置,请使用 NodeMaven HTTP 代理。SOCKS5 应视为进阶配置,部署前请先确认处理器的兼容性。
下载器中间件可以在请求到达下载器之前对其进行修改。在本集成中,NodeMavenProxyMiddleware 负责设置 request.meta["proxy"],而 Scrapy 内置的 HttpProxyMiddleware 会将该代理应用到网络请求上。
可以。直接在该请求上设置代理 URL:
yield scrapy.Request( url="https://example.com/", meta={"proxy": proxy_url}, )
单个请求上设置的值优先于代理环境变量。中间件示例中使用了 setdefault,因此已显式指定的请求代理会被保留。
HTTP 407 表示代理身份验证失败。请确认用户名完整、密码和 HTTP 端口正确、保留字符已进行 URL 编码,并且运行 Scrapy 的进程能够读取到相应的环境变量。
请将凭据保存在环境变量或密钥管理器中。不要把它们粘贴到 settings.py、middlewares.py、截图、日志或已提交到仓库的 .env 文件中。只提交变量名和示例占位符。
可以。同一套 NodeMaven 网关凭据可以集成到 Python Requests、Scrapy 和 Selenium 中。每种工具都有各自的代理配置语法,因此请复用连接信息,而不要把 Scrapy 专用的中间件代码照搬到其他库中。
NodeMaven 提供住宅代理、移动代理和 ISP 代理、地理定位、轮换会话与粘性会话、HTTP 与 SOCKS5 节点,以及 IP 质量过滤选项。开发者可以据此为每个爬虫匹配合适的代理行为,无需维护不稳定的公共代理池。
Scrapy 通过 NodeMaven 网关发送请求,由 NodeMaven 管理出口 IP。选择轮换会话可自动更换 IP,选择粘性会话则可保持同一 IP。
不需要。NodeMaven 通过单一网关实现轮换,因此无需额外的代理轮换插件。scrapy-rotating-proxies 等工具主要用于管理和测试一组独立的代理服务器。
以 $3.50 购买适用于 Scrapy 的代理服务器,并获得 750MB 流量

探索我们全部的代理解决方案
探索代理类型和价格选项, 为您的工作流程选择最合适的方案




