先别急着填端口,搞清楚你要填的是哪扇"门"
上个月帮一个做家居类目的朋友看脚本。他从服务商后台复制了一串数字,粘到代码里,跑十条链接九条超时。翻来覆去改代码,改到怀疑人生,最后发现——他填的那个端口,是后台"生成IP列表"的接口端口,压根不是代理本身的门。
这种事在电商采集里太常见了。IP 像楼栋门牌,端口就是门牌后面那扇具体的门。同一栋楼有很多扇门,敲错了自然没人应。
实际干活时你会碰到三种端口,长得像,用途完全不同:
提取端口——后台给你吐 IP 列表的那个地址带的端口,用来"要货"的,不能当代理用。
代理端口——真正转发你网页请求的那扇门,通常跟 IP 成对出现,格式就是 IP:端口,列表里紧挨着 IP 的那串数字才是它。
本机端口——你自己电脑上某些软件占的坑,比如 7890、1080,跟服务商一点关系都没有。
判断方法很简单:后台一般会给一行现成的 IP:端口,中间是英文冒号,冒号后面那几位就是代理端口。真不确定,就找客服要一份"地址+端口+账号密码"的完整清单,别自己猜。
协议不同,端口和写法都不一样
拿到端口只是第一步,写法错了照样连不上。采集电商页面常用的几套协议,端口和格式差得挺远:
| 协议 | 典型端口 | 地址怎么写 | 什么时候用 |
|---|---|---|---|
| HTTP | 8080 或自定义 | http://IP:端口 | 商品列表页、分类页这类普通抓取 |
| HTTPS | 一般同 HTTP | http://IP:端口(前缀仍是 http) | 详情页、需要登录态的数据 |
| SOCKS5 | 1080 或自定义 | socks5://IP:端口 | 抓取限制比较硬的站点,全协议转发 |
| SSTP | 443 | 系统连接界面里填 | 需要加密通道时用 |
两个高频坑提前说。
第一个,目标站是 HTTPS,不代表你的代理地址要写 https://。绝大多数服务给的是 HTTP 隧道,目标站是 HTTPS,代理地址却得写成 http://。写成 https://IP:端口,会直接卡在握手阶段报错。
第二个,SOCKS5 千万别套 http:// 前缀。标准写法是 socks5://,写 socks5h:// 则是让域名解析也走代理,部分库认这个。混着写就是连不上。
还有账号密码。带认证的代理,完整写法是把认证信息塞进地址:
http://用户名:密码@IP:端口
密码里如果有 @、#、: 这类符号,必须先做 URL 编码。不然解析器会把 @ 后面当成主机名,报出来的错跟认证毫无关系,特别迷惑人。
连通性测试,按这三步走最省时间
别一上来就往爬虫里塞,先在命令行把链路验一遍。三步,从底层往上层走。
第一步,看端口通不通。
telnet 代理主机 端口
# 或者用 nc
nc -vz 代理主机 端口
返回 Connected 或 succeeded,说明门是开着的。卡着不动是超时,通常是端口填错或本地网络拦了;立刻弹 Connection refused,说明主机在线但这扇门没开,回去核对数字。Windows 默认没装 telnet 客户端,得先在"启用或关闭 Windows 功能"里勾上。
第二步,发一次真实请求,看返回码。
curl -x http://用户名:密码@代理主机:端口 "目标页面地址" -I
看到 HTTP/1.1 200,链路通了。看到 407,是账号密码不对或者特殊符号没转义。502、503,一般是出口线路在波动,换一条再试。这一步顺便还能看响应时间,超过 2 秒的线路,跑起来会明显拖后腿。
第三步,拿真实链接小跑一轮。
挑 15 到 20 条你真正要采的页面,别拿首页测——首页没什么反爬压力,测不出问题。跑完盯两个数:成功率、平均耗时。成功率低于 90%,回头查端口和认证;成功率够但耗时忽高忽低,那是线路质量问题,改配置没用。
写进代码时,这几个参数别省
Python 里最省事的写法是这样,认证信息直接拼在地址上:
import requests
host = "代理主机"
port = "代理端口"
user = "你的账号"
pwd = "你的密码"
proxy_url = f"http://{user}:{pwd}@{host}:{port}"
proxies = {"http": proxy_url, "https": proxy_url}
r = requests.get("目标页面地址", proxies=proxies, timeout=10)
print(r.status_code, len(r.text))
timeout 一定要写。不写的话,线路一抖动,整个脚本就挂在那儿干等,看着像死机,其实是在等一个永远不来的响应。
另外两点容易忽略。会话对象 Session 建好之后,代理是跟着会话走的,你中途改了 proxies 却还在用老会话,请求依然走旧线路,看着就像"IP 没换"。想换线路,重建会话,或者干脆直接用 requests.get 传参。
再就是轮换节奏。同一个出口连续跑同一个站,几分钟就被识别,这是目标站的行为,不是端口的问题。每跑几十条换一次出口,中间隔一两秒,成功率会明显好看。
连不上的时候,对着这张表查
| 现象 | 大概率原因 | 怎么处理 |
|---|---|---|
| 407 Proxy Authentication Required | 账号密码错,或密码里有未转义符号 | 把密码做 URL 编码后重试 |
| Connection timed out | 端口数字错,或本机防火墙拦了 | 先用 telnet 验端口 |
| 502 / 503 | 出口线路临时波动 | 换一条线路,别死磕 |
| 403 Forbidden | 请求频率太高被目标站挡了 | 降并发、加请求间隔 |
| 返回的像是本机 IP | 代理根本没生效 | 检查会话是否复用旧配置 |
按这张表走,八成的疑惑在往下第三行之前就有结论了。剩下那两成,基本是线路本身的质量问题——这时候改配置没有意义,得换资源。
端口配好只是开始,出口质量决定能不能跑稳
说句实在话,端口怎么填、怎么写、怎么测,是十分钟能学会的事。真正让电商采集头疼的,是跑了一上午之后开始大面积超时,或者同一个地区总是拿不到准确的价格,那是出口资源的问题。
这块可以看看神龙IP。动态高级套餐本来就是给采集和排名测试这类活儿准备的:6Mbps 峰值带宽、日更 200 万+ 纯净 IP、2 到 360 小时的时效可选,配合 200+ 城市的精准定位,做各地搜索结果的对比、不同地区商品价格的差异监测,是比较对路的组合。自营机房,30ms 级别的响应,地址和端口在后台成对给出,复制就能用,省掉前面那些猜门牌的环节。
如果你的场景是长期盯住几个固定站点、希望出口别老变,那就看静态高级,运营商合作资源,长期固定,同样是 6Mbps。协议上支持 IKEv2、PPTP、L2TP、SSTP、SOCKS5 这几种,数据传输全程加密,端口按你实际的使用方式选就行。
常见问题
Q:代理 IP 和端口之间用什么符号隔开?
英文冒号。写成 IP:端口 才是对的,中文冒号或者空格都会让程序解析失败,这个错误肉眼几乎看不出来,复制的时候建议双击整段选中。
Q:同一个 IP,端口填 80 和 8080 有区别吗?
有。端口是服务端把服务开在哪扇门上,不是你随便挑的。服务商给哪个就填哪个,自己改成 80 大概率是超时。你能决定的其实是套餐里的带宽、时效这些参数。
Q:命令行测着是通的,跑几十条就断了,怎么回事?
两种可能。一是请求间隔太短,目标站识别到同一出口的高频访问,主动掐了连接;二是这个出口线路本身不稳,单次请求看不出,连续跑就露馅。先把间隔加到 1 到 2 秒再试,还断就换资源。
Q:SOCKS5 的端口能直接当 HTTP 代理用吗?
不能。协议不同,端口只是门牌号,门后面的服务对不上照样进不去。要在支持 SOCKS5 的地方填 socks5://IP:端口,混用要么直接报错,要么更麻烦——连接建立了但数据不对,排查起来更费劲。





