如何在 Scrapy 中使用代理:完整指南
了解如何为大规模网页抓取配置 GProxy 住宅代理和数据中心代理与 Scrapy 配合使用,内容涵盖中间件设置、代理轮换和错误处理。
准备事项
- ✓[
- ✓"
- ✓已
- ✓安
- ✓装
- ✓
- ✓P
- ✓y
- ✓t
- ✓h
- ✓o
- ✓n
- ✓
- ✓3
- ✓.
- ✓8
- ✓+
- ✓"
- ✓,
- ✓
- ✓"
- ✓已
- ✓安
- ✓装
- ✓
- ✓S
- ✓c
- ✓r
- ✓a
- ✓p
- ✓y
- ✓
- ✓2
- ✓.
- ✓x
- ✓(
- ✓p
- ✓i
- ✓p
- ✓
- ✓i
- ✓n
- ✓s
- ✓t
- ✓a
- ✓l
- ✓l
- ✓
- ✓s
- ✓c
- ✓r
- ✓a
- ✓p
- ✓y
- ✓)
- ✓"
- ✓,
- ✓
- ✓"
- ✓拥
- ✓有
- ✓有
- ✓效
- ✓代
- ✓理
- ✓套
- ✓餐
- ✓的
- ✓
- ✓G
- ✓P
- ✓r
- ✓o
- ✓x
- ✓y
- ✓
- ✓账
- ✓户
- ✓"
- ✓,
- ✓
- ✓"
- ✓对
- ✓
- ✓S
- ✓c
- ✓r
- ✓a
- ✓p
- ✓y
- ✓
- ✓s
- ✓p
- ✓i
- ✓d
- ✓e
- ✓r
- ✓
- ✓和
- ✓
- ✓s
- ✓e
- ✓t
- ✓t
- ✓i
- ✓n
- ✓g
- ✓s
- ✓
- ✓有
- ✓基
- ✓本
- ✓了
- ✓解
- ✓"
- ✓]
分步设置
[
{
"
T
I
T
L
E
"
:
"
安
装
S
C
R
A
P
Y
"
,
"
D
E
S
C
R
I
P
T
I
O
N
"
:
"
安
装
S
C
R
A
P
Y
并
创
建
新
项
目
"
,
"
C
O
D
E
"
:
"
P
I
P
I
N
S
T
A
L
L
S
C
R
A
P
Y
\
N
S
C
R
A
P
Y
S
T
A
R
T
P
R
O
J
E
C
T
M
Y
P
R
O
J
E
C
T
\
N
C
D
M
Y
P
R
O
J
E
C
T
"
}
,
{
"
T
I
T
L
E
"
:
"
在
S
E
T
T
I
N
G
S
.
P
Y
中
配
置
代
理
"
,
"
D
E
S
C
R
I
P
T
I
O
N
"
:
"
将
代
理
设
置
添
加
到
项
目
的
S
E
T
T
I
N
G
S
.
P
Y
"
,
"
C
O
D
E
"
:
"
#
S
E
T
T
I
N
G
S
.
P
Y
\
N
H
T
T
P
P
R
O
X
Y
_
E
N
A
B
L
E
D
=
T
R
U
E
\
N
D
O
W
N
L
O
A
D
E
R
_
M
I
D
D
L
E
W
A
R
E
S
=
{
\
N
'
M
Y
P
R
O
J
E
C
T
.
M
I
D
D
L
E
W
A
R
E
S
.
G
P
R
O
X
Y
M
I
D
D
L
E
W
A
R
E
'
:
3
5
0
,
\
N
'
S
C
R
A
P
Y
.
D
O
W
N
L
O
A
D
E
R
M
I
D
D
L
E
W
A
R
E
S
.
H
T
T
P
P
R
O
X
Y
.
H
T
T
P
P
R
O
X
Y
M
I
D
D
L
E
W
A
R
E
'
:
4
0
0
,
\
N
}
"
}
,
{
"
T
I
T
L
E
"
:
"
创
建
代
理
中
间
件
"
,
"
D
E
S
C
R
I
P
T
I
O
N
"
:
"
在
M
I
D
D
L
E
W
A
R
E
S
.
P
Y
中
创
建
自
定
义
中
间
件
"
,
"
C
O
D
E
"
:
"
C
L
A
S
S
G
P
R
O
X
Y
M
I
D
D
L
E
W
A
R
E
:
\
N
D
E
F
P
R
O
C
E
S
S
_
R
E
Q
U
E
S
T
(
S
E
L
F
,
R
E
Q
U
E
S
T
,
S
P
I
D
E
R
)
:
\
N
P
R
O
X
Y
=
'
H
T
T
P
:
/
/
U
S
E
R
:
P
A
S
S
@
P
R
O
X
Y
.
G
P
R
O
X
Y
.
N
E
T
:
1
0
0
0
'
\
N
R
E
Q
U
E
S
T
.
M
E
T
A
[
'
P
R
O
X
Y
'
]
=
P
R
O
X
Y
"
}
,
{
"
T
I
T
L
E
"
:
"
添
加
轮
换
支
持
"
,
"
D
E
S
C
R
I
P
T
I
O
N
"
:
"
如
需
自
动
轮
换
I
P
,
请
使
用
B
A
C
K
C
O
N
N
E
C
T
端
点
"
,
"
C
O
D
E
"
:
"
C
L
A
S
S
G
P
R
O
X
Y
R
O
T
A
T
I
N
G
M
I
D
D
L
E
W
A
R
E
:
\
N
D
E
F
P
R
O
C
E
S
S
_
R
E
Q
U
E
S
T
(
S
E
L
F
,
R
E
Q
U
E
S
T
,
S
P
I
D
E
R
)
:
\
N
R
E
Q
U
E
S
T
.
M
E
T
A
[
'
P
R
O
X
Y
'
]
=
'
H
T
T
P
:
/
/
U
S
E
R
-
C
O
U
N
T
R
Y
-
U
S
:
P
A
S
S
@
P
R
O
X
Y
.
G
P
R
O
X
Y
.
N
E
T
:
1
0
0
0
'
\
N
\
N
D
E
F
P
R
O
C
E
S
S
_
E
X
C
E
P
T
I
O
N
(
S
E
L
F
,
R
E
Q
U
E
S
T
,
E
X
C
E
P
T
I
O
N
,
S
P
I
D
E
R
)
:
\
N
R
E
T
U
R
N
R
E
Q
U
E
S
T
#
使
用
新
I
P
重
试
"
}
,
{
"
T
I
T
L
E
"
:
"
配
置
重
试
参
数
"
,
"
D
E
S
C
R
I
P
T
I
O
N
"
:
"
添
加
重
试
配
置
以
提
高
可
靠
性
"
,
"
C
O
D
E
"
:
"
#
S
E
T
T
I
N
G
S
.
P
Y
\
N
R
E
T
R
Y
_
E
N
A
B
L
E
D
=
T
R
U
E
\
N
R
E
T
R
Y
_
T
I
M
E
S
=
5
\
N
R
E
T
R
Y
_
H
T
T
P
_
C
O
D
E
S
=
[
4
0
3
,
4
0
7
,
4
2
9
,
5
0
0
,
5
0
2
,
5
0
3
]
\
N
D
O
W
N
L
O
A
D
_
T
I
M
E
O
U
T
=
3
0
"
}
,
{
"
T
I
T
L
E
"
:
"
运
行
您
的
S
P
I
D
E
R
"
,
"
D
E
S
C
R
I
P
T
I
O
N
"
:
"
测
试
代
理
配
置
"
,
"
C
O
D
E
"
:
"
S
C
R
A
P
Y
C
R
A
W
L
M
Y
S
P
I
D
E
R
-
O
O
U
T
P
U
T
.
J
S
O
N
"
}
]
代码示例
为什么要在 Scrapy 中使用代理?
Scrapy 是最流行的 Python 网页抓取框架,每天支撑着数百万次抓取任务。在大规模抓取时,您不可避免会遇到 IP 封禁、CAPTCHA 和频率限制。GProxy 覆盖 150+ 国家、拥有 10M+ IP 的住宅代理池会自动轮换出口 IP,从而解决这些问题。
代理认证方式
GProxy 在 Scrapy 中支持两种认证方式:通过代理 URL 的用户名/密码认证,以及在 GProxy 控制台中添加服务器 IP 的 IP 白名单认证。两种方式都能与 Scrapy 内置的代理支持无缝配合。
基础代理配置
在 Scrapy 中使用 GProxy 代理最简单的方式是通过 settings.py 文件。设置 HTTP_PROXY 和 HTTPS_PROXY 环境变量,或直接在 spider 的 custom settings 中配置。若需要轮换代理,请使用自定义 downloader middleware,为每个请求分配新的代理 URL。
自定义代理轮换中间件
用于生产环境的抓取时,自定义中间件能让您完全掌控代理分配。中间件在请求发送前拦截它,分配带轮换参数的代理端点,并处理超时或 407 认证失败等与代理相关的错误。GProxy 的 backconnect 端点在服务端完成轮换,因此通过同一端点建立的每个连接都会获得不同的 IP。
错误处理与重试
稳健的抓取需要完善的错误处理。配置 Scrapy 的 retry middleware 与您的代理方案配合:对 403、407、429 和 503 状态码进行重试,并设置合理的重试次数(3-5 次)。GProxy 的粘性会话可在需要时让多次重试保持同一个 IP——这对多页流程很有用。
并发请求与性能
Scrapy 擅长并发抓取,GProxy 的基础设施也能很好地承载高并发。先从 CONCURRENT_REQUESTS = 32 和 DOWNLOAD_DELAY = 0.5 开始,再根据目标站点的表现调整。使用 GProxy 住宅代理时,通常可以稳定运行 50-100 个并发请求。
在 Scrapy 中做地理定位
GProxy 支持国家和城市级别的定位。将目标国家作为代理凭据的一部分传入(例如 user-country-us),即可让请求经由该地区的 IP 发出。抓取有地域限制的内容或本地化搜索结果时,这一点必不可少。
