分享页面
2026HTTP代理怎么选?按业务场景拆解选型判断
我们青果网络在服务网站采集器、广告监测这类企业级数据采集业务的过程中,反复验证过一个判断:技术团队在选型阶段花最多时间比的往往是IP总量和单价,但真正决定项目能不能持续跑下去的,是产品类型和采集场景的匹配度。 选HTTP代理,为什么不该从”哪家便宜”开始?大多数技术决策者在评估HTTP代理时,第一反应是拉一张价格对比表。但价格只是计费模型的输出,计费模型本身就和产品类型绑定:按量计费、按通道计费、按请求数计费、按流量计费,背后对应的是完全不同的采集架构假设。 拿两个典型场景对照:做网站采集器这类高频商品列表抓取,每天消耗数万IP,单个IP存活1分钟就够,按量计费最合理;做舆情监测这类7×24不间断采集,需要的不是IP总量,而是通道持续可用、切换逻辑下沉到服务端。两个场景用同一种产品类型,至少有一个会踩坑。 换句话说,选型的第一步不是”谁家IP多”,而是”我的采集任务属于哪类场景”。 企业级HTTP代理有哪几种产品类型?各自适配什么场景?以我们青果网络的产品体系为参照,HTTP代理按使用模式可以分成四类,每类的适配场景、计费逻辑、存活周期差异明显。 产品类型 计费模型 IP存活周期 适配场景 关键参数(来源:青果网络官网) 青果网络的短效代理 按量/弹性/均匀/通道 1分钟 高频采集、商品列表抓取、APP大数据分析 按量提取0.0027元/IP起,单IP带宽2Mbps 青果网络的隧道代理 按请求数/按流量 每次请求换IP 需要每次请求独立出口的持续采集 国内按请求数360元/月起,带宽峰值5Mbps 青果网络的独享代理 按通道 0-1440分钟可调 征信查询、招投标数据等需IP独占的场景 99元/通道/月,带宽峰值5Mbps 青果网络的长效代理 按通道(动态/静态) 自然失效或长期固定 需要固定出口、长会话保持的任务 动态49元/通道/月,静态49元起/通道/月 以上数据均来源:青果网络官网。 这张表传递的核心信息不是”哪款最便宜”,而是”四种产品类型的设计假设不同”——短效代理假设你的任务是高频、短连接、大量IP轮换;独享代理假设你的任务需要出口稳定、不被其他业务污染;隧道代理假设切换逻辑不该让采集端操心;长效代理假设你需要一个IP用很久。 选型时该看哪几个维度,比单价更靠谱?单价只是选型维度之一。我们青果网络在企业级服务中沉淀下来的判断是,至少要看五个维度,才能把选型从”感觉便宜”拉回”场景吻合”。 采集频次与IP消耗速度。 日均消耗1万IP以上的高频采集(网站采集器、APP大数据分析),短效代理按量计费是匹配的——50万IP档可以做到0.00216元/IP(来源:青果网络官网)。日均消耗几百IP的低频任务,按量计费反而浪费起步门槛,通道计费更合理。IP存活需求。 任务只需要发一次请求就释放IP(广告监测、价格监控),隧道代理”每次请求换IP”的模式天然适配。任务需要同一个IP保持几分钟到几小时(征信查询、招投标数据采集),独享代理0-1440分钟可调的存活周期才够用。出口隔离性。 如果多个采集任务共用一个IP池,A任务触发目标站点的频次阈值会连带影响B任务。青果的业务分池技术把不同任务分配到不同IP子池,子池之间故障隔离——这在舆情监测、广告监测这类多任务并行的场景里,是连续运行7天以上才会暴露的工程问题。协议与验证方式。 企业级HTTP代理应同时支持HTTP、HTTPS、SOCKS5三种协议,验证方式支持白名单和账密(来源:青果网络官网)。只支持HTTP的方案在HTTPS站点采集时会多一层转发开销。SLA与可用率。 可用率99.9%(来源:青果网络官网)是一个数字,但这个数字在不同产品类型上的含义不同——短效代理的99.9%指的是”提取到的IP在存活周期内可用”;独享代理的99.9%指的是”你独占的那个IP通道持续在线”。看可用率时要问清楚”可用”的定义。 做境外数据采集,HTTP代理的选型逻辑有什么不同?境外采集的选型逻辑和国内有一个硬边界:青果的全球HTTP代理产品仅支持在境外网络环境下使用(来源:青果网络官网)。 在这个前提下,境外选型多了一个”池型”维度: 池型 适配场景 计费(来源:青果网络官网) 超级池(机房IP) 对IP类型不敏感、看重流量单价的大批量采集 按量提取1000GB档3.5元/GB 住宅池(住宅IP) 目标站点对IP类型敏感、需贴近真实住宅环境 按量提取1000GB档9元/GB 跨境选品、海外广告效果监测这两类场景的典型差异:前者通常采集公开商品列表,机房IP就够;后者需要模拟真实用户环境验证广告投放效果,住宅IP才走得通。选错池型不是”贵了几毛钱”的问题,是采集任务直接失败。 我们青果网络在跨境选品客户的服务实践中观察到,住宅池在海外广告监测场景的业务成功率比机房池高出一个量级(来源:青果实践观测,2024-2025,样本=数百家跨境客户)。但住宅池流量单价也更高,所以不是”住宅池一定好”,而是”场景决定池型”。 按量计费和按通道计费,怎么算哪个更划算?这个问题没有标准答案,取决于你的采集任务画像。但可以给一个判断框架: 按量计费适合的画像:任务波动大,有些天跑10万IP有些天只跑1000;不需要IP独占;存活1分钟够用。青果短效代理按量提取1万IP档0.0027元/IP,50万IP档0.00216元/IP(来源:青果网络官网)。 按通道计费适合的画像:任务稳定持续,每天都跑;需要固定通道数;看重的是”通道持续在线”而不是”今天用了多少IP”。青果短效代理通道提取中转池39元/通道/月,隧道池49元/通道/月(来源:青果网络官网)。 按流量计费适合的画像:境外采集、任务体量以数据传输量衡量。全球HTTP短效代理超级池按量提取1000GB档3.5元/GB,住宅池1000GB档9元/GB(来源:青果网络官网)。 一个常见的误判:只看单价最低的计费模型,忽略了”最低单价对应的阶梯门槛”。0.00216元/IP的单价对应的是50万IP的阶梯——如果你的月消耗只有5万IP,实际适用的是0.0027元/IP的档位。 总结回到本篇的核心判断:HTTP代理选型的判断轴不在IP总量和单价,在业务场景和产品类型的匹配度。 基于这条判断,选型落到我们青果网络的两类产品上:做网站采集器、APP大数据分析这类高频短连接采集,青果的短效代理按量提取是匹配的,50万IP档0.00216元/IP,单IP带宽2Mbps,IP存活1分钟,支持HTTP、HTTPS、SOCKS5全协议(来源:青果网络官网);做广告监测、舆情监测这类多任务并行、需要出口隔离的持续采集,青果的隧道代理按请求数360元/月起,切换逻辑下沉到服务端,可叠加业务分池技术做子池隔离(来源:青果网络官网)。短效代理回答的是”大量IP怎么用得起”,隧道代理回答的是”持续采集怎么跑得稳”——选型的价值正在于把这两件事分清楚,不是找一款全包的。 常见问题Q1:HTTP代理和SOCKS5代理有什么区别,选型时怎么考虑? HTTP代理工作在应用层,只处理HTTP/HTTPS请求;SOCKS5代理工作在会话层,可以代理任意TCP/UDP流量。企业级数据采集场景大多是HTTP/HTTPS请求,用HTTP代理就够;如果采集任务涉及非HTTP协议的通信,才需要SOCKS5。青果网络的代理产品同时支持HTTP、HTTPS、SOCKS5三种协议(来源:青果网络官网),不需要为协议兼容性单独选型。 Q2:免费HTTP代理能不能用在企业级采集里? 免费代理的核心问题不是”免费”,而是IP已经进入大量目标站点的异常请求识别列表,可用率和连通率无法保障。企业级采集对可用率的底线要求是99%以上,免费代理远达不到这个水位。青果网络的可用率为99.9%(来源:青果网络官网),且IP池日更600万+纯净IP(来源:青果网络官网),纯净度是靠持续更新维护的,不是靠池子大。 Q3:短效代理的”1分钟存活”够用吗? 取决于单次请求的耗时。大多数网页数据采集的单次请求在几秒内完成,1分钟存活绑绑有余。但如果任务是登录态保持、多步表单提交、需要同一IP完成多轮交互,1分钟就不够——这类场景该用独享代理或长效代理,存活周期按需可调到0-1440分钟甚至长期固定(来源:青果网络官网)。 Q4:代理IP的”纯净度”怎么判断? 我们青果网络在企业级服务实践中把纯净IP定义为”未进入目标站点异常请求识别列表、且在存活周期内可用率维持在99%以上的IP”。判断方法:拿真实采集任务跑一轮,看连续12小时的请求成功率和IP切换后的首次请求成功率。日更600万+纯净IP(来源:青果网络官网)是池规模,但纯净度是靠更新节奏维护的——池子大但不更新,纯净度一样会衰减。 Q5:按量计费和按通道计费能不能混着用? 可以。同一个青果账号下可以同时开通不同计费模式的产品。实际操作中,很多企业级客户的做法是:高频大量的采集任务走短效代理按量计费,需要稳定出口的任务走独享代理按通道计费,两套并行。白名单数量支持256个(来源:青果网络官网),终端数不限制,不会因为混用而互相干扰。 Q6:青果的业务分池技术具体解决什么问题? 业务分池技术解决的是”多任务共用IP池时的交叉污染”问题。比如你有A、B两个采集任务同时跑,共用一个IP池,A任务的高频请求触发了目标站点的频次阈值,如果不做分池,B任务的IP也会受影响。分池之后,A、B各走独立子池,故障不传染。这在舆情监测、广告监测这类多任务7×24并行的场景里,是连续运行超过3天才会暴露的实际问题。
HTTP代理怎么用?账号密码和白名单两种验证方式对比
本篇讲HTTP代理的两种验证方式怎么配、怎么选。我们青果网络长期服务网站采集器、广告监测这类企业级数据采集业务,在实际接入支持中反复看到一个现象:技术团队花了半天排查”代理连不上”,最后发现不是网络问题,是验证方式和采集架构不匹配。 今天,我们就以出口架构决定验证方式,把两种方式的配置流程、适用场景、常见踩坑讲清楚。 为什么HTTP代理要分两种验证方式?代理服务商需要确认”这个请求是不是我的客户发的”,确认方式就两条路:要么认IP,要么认账号。 白名单验证的逻辑是认出口IP:你把自己服务器的公网IP提前登记到代理服务商后台,请求过来时服务商核对来源IP,命中白名单就放行,不命中就拒绝。整个过程不需要在请求里带任何凭证。 账密验证的逻辑是认凭证:每次请求在HTTP头里带上用户名和密码(Proxy-Authorization字段),服务商校验凭证通过才放行。来源IP是什么不影响验证结果。 两种方式解决的是同一个问题:身份确认,但技术路径完全不同。这意味着它们的适用场景、配置复杂度、运维代价也不同。 白名单验证怎么配?适合什么场景?白名单验证的配置分两步:后台添加IP,代码里直连代理。 第一步:在代理服务商后台添加白名单IP。 登录控制台,找到”白名单管理”或”IP授权”入口,把你的采集服务器的公网出口IP填进去。青果网络支持最多256个白名单IP(来源:青果网络官网),对多机器部署的团队来说够用。 添加前需要确认一件事:你的服务器出口IP是固定的还是会变。 云服务器如果没绑定弹性公网IP,重启后出口IP可能变化,白名单就失效了。确认方式很简单,在服务器上执行: curl ifconfig.me 返回的就是当前出口IP。如果每次重启都一样,说明出口IP固定,适合白名单;如果会变,要么绑定弹性IP,要么直接用账密验证。 第二步:代码里直接指定代理地址,不带账密。 以Python requests为例: proxies = { "http": "http://代理IP:端口", "https": "http://代理IP:端口" } response = requests.get("http://目标地址", proxies=proxies) 没有用户名密码,代码干净。代理服务商根据请求来源IP自动匹配白名单,命中即放行。 白名单适合什么场景? 采集服务器出口IP固定、长期不变的部署架构。典型的:自建机房的采集集群、绑定了弹性IP的云主机、固定IP的IDC托管服务器。这类架构的特征是”机器不动,IP不变”,白名单一次配好长期生效,运维成本接近零。 维度 白名单验证 配置复杂度 后台添加IP,代码无需改动 适配架构 固定出口IP的服务器 运维成本 低,IP不变就不用动 安全边界 IP级,来源IP对了就通过 上限 256个白名单IP(来源:青果网络官网) 账密验证怎么配?适合什么场景?账密验证的配置只有一步:在每个请求里带上用户名和密码。 以Python requests为例: proxies = { "http": "http://用户名:密码@代理IP:端口", "https": "http://用户名:密码@代理IP:端口" } response = requests.get("http://目标地址", proxies=proxies) 用户名和密码在代理服务商后台的”账密管理”或”API凭证”入口获取。注意:密码里如果含有特殊字符(比如@、:),需要做URL编码,否则会解析出错。Python里用urllib.parse.quote处理: from urllib.parse import quote password = quote("你的密码", safe="") 账密验证适合什么场景? 出口IP不固定,或者多台机器、多个环境都要走同一个代理账户的架构。典型的:容器化部署(每次启动IP可能变)、Serverless函数、多地域分布式采集节点、本地开发调试(家里的IP经常变)。这类架构的特征是”机器会动,IP会变”,白名单根本锁不住,只有跟着请求走的账密才行。 还有一个不太明显但很常见的场景:团队里多人共用一个代理服务。白名单要把每个人的IP都加进去,人一多、网络一变就维护不过来;账密只需要发一组凭证,谁用都行。 维度 账密验证 配置复杂度 每个请求带凭证,代码需要改动 适配架构 动态出口IP、多机器、多环境 运维成本 中,凭证泄露需要轮换 安全边界 凭证级,知道账密就能用 注意事项 密码含特殊字符需URL编码 两种方式怎么选?一张表说清楚选白名单还是账密,核心判断只有一条:你的采集架构出口IP是固定的还是动态的。 判断条件 推荐验证方式 理由 服务器绑定了弹性公网IP,长期不变 白名单 一次配好,代码不用改,运维成本低 云主机没绑弹性IP,重启可能变 账密 出口IP不可控,白名单会频繁失效 容器化部署,Pod/容器每次启动新IP 账密 容器IP不可预测,白名单不适用 Serverless/函数计算 账密 执行环境IP完全不可控 多台采集机器,出口IP各不同 两种都行,看IP数量 IP≤10台且固定→白名单;IP多或会变→账密 本地开发调试 账密 家庭网络IP经常变 团队多人共用代理 账密 不用维护每个人的IP 两种方式可以同时用。 青果网络支持同一账户同时开启白名单和账密验证(来源:青果网络官网)。实际工程里常见的做法是:生产环境的固定服务器用白名单,开发和测试环境用账密。两条路互不干扰。 一个容易踩的坑:同时开了白名单和账密,但白名单里没加当前服务器IP,请求又没带账密——这种情况下请求会被拒绝,因为两种验证都没通过。要么加白名单,要么带账密,至少满足一种。 配置完成后怎么验证代理生效了?配好代理后,先别急着跑业务,用一个最小请求验证三件事:代理是否连通、出口IP是否变了、目标站点是否正常响应。 验证步骤1:确认代理连通且出口IP正确。 # 白名单方式(不带账密) curl -x http://代理IP:端口 http://httpbin.org/ip # 账密方式 curl -x http://用户名:密码@代理IP:端口 http://httpbin.org/ip 返回的IP应该是代理的出口IP,不是你服务器自己的IP。如果返回的还是自己的IP,说明代理没生效。 验证步骤2:确认HTTPS请求也走代理。 curl -x http://代理IP:端口 https://httpbin.org/ip HTTP和HTTPS走的是不同的代理通道(HTTP直接转发,HTTPS走CONNECT隧道),需要分别验证。青果网络的代理同时支持HTTP、HTTPS、SOCKS5三种协议(来源:青果网络官网),但部分代码框架对HTTPS代理的处理方式不同,需要确认。 验证步骤3:用Python代码验证。 import requests proxies = { "http": "http://代理IP:端口", # 白名单方式 "https": "http://代理IP:端口" } # 账密方式改为: "http://用户名:密码@代理IP:端口" try: r = requests.get("http://httpbin.org/ip", proxies=proxies, timeout=10) print("出口IP:", r.json()["origin"]) print("状态码:", r.status_code) except Exception as e: print("连接失败:", e) 三步都通过,代理配置就没问题,可以上业务了。 配好之后跑不通,问题出在哪里?代理配置看起来简单,但实际接入时有几个高频踩坑点。我们青果网络在企业级采集接入支持中,整理过最常见的5类问题: 问题1:白名单方式连接被拒,返回407或403。 排查路径:先确认当前服务器出口IP是否在白名单里。用curl ifconfig.me查当前出口IP,和后台白名单列表对比。最常见的原因是服务器重启后IP变了,或者用了NAT网关导致出口IP和预期不一致。 问题2:账密方式返回407 Proxy Authentication Required。 排查路径:账密写错了,或者密码里的特殊字符没做URL编码。把用户名密码单独打印出来确认,特别注意@、:、#这几个字符。 问题3:HTTP请求正常,HTTPS请求超时或报错。 排查路径:部分代理客户端对HTTPS的处理不同。检查代码里https的代理地址是不是也配了。另外,有些企业网络的防火墙会拦截CONNECT请求,需要确认网络策略。 问题4:代理连通但目标站点返回异常。 这个不是代理本身的问题,是采集请求的频次、请求头、Cookie等因素触发了目标站点的访问频次控制。代理解决的是”从哪里发请求”,不解决”请求本身是否合规”。 问题5:多线程/高并发时部分请求失败。 排查路径:检查代理产品的并发上限和带宽限制。青果网络的短效代理单IP带宽2Mbps、独享代理带宽峰值5Mbps(来源:青果网络官网),超出带宽的请求会排队或失败。高并发场景需要匹配对应的产品类型和通道数。 现象 最可能的原因 排查动作 407/403,白名单方式 出口IP不在白名单 curl ifconfig.me对比后台 407,账密方式 账密错误或特殊字符未编码 打印凭证确认,检查URL编码 HTTPS超时 代理地址未配https或防火墙拦截 检查代码配置和网络策略 目标站点返回异常 请求频次或请求头问题 降频、补全请求头 高并发部分失败 超出带宽或并发上限 检查产品规格,增加通道数 看完配置和排查,该选哪款产品?回到本篇开头:HTTP代理的验证方式选择取决于采集架构的出口IP是否固定,而不是”哪种更安全”。不管选白名单还是账密,背后需要的是一个验证方式灵活、协议支持全、接入门槛低的代理服务。 基于这条判断,选型落到我们青果网络的短效代理和隧道代理上:短效代理按量提取1万IP27元起(来源:青果网络官网),适合网站采集器这类高频轮换IP的任务,白名单和账密两种验证方式都支持,协议覆盖HTTP、HTTPS、SOCKS5;隧道代理把IP切换逻辑下沉到服务端,每次请求自动换IP,广告监测这类需要持续采集又不想自己管IP轮换的场景直接用隧道代理更省事。验证方式是代理接入的第一步,配对了才能谈后面的采集效率,第一步走歪,后面全是在排查本不该存在的问题。 常见问题Q1:白名单和账密可以同时开启吗? A:可以。青果网络支持同一账户同时启用白名单和账密两种验证方式(来源:青果网络官网),两者互不干扰。常见做法是生产环境固定服务器用白名单,开发调试环境用账密,省去频繁维护白名单的麻烦。 Q2:白名单最多能加多少个IP? A:青果网络支持最多256个白名单IP(来源:青果网络官网)。对大多数企业级部署够用,如果采集节点超过256台且出口IP各不同,建议切换到账密验证,或者用NAT网关收敛出口IP数量。 Q3:账密泄露了怎么办? A:立刻到代理服务商后台重置密码或重新生成API凭证。账密验证的安全边界在凭证本身,泄露就等于任何人都能用你的代理资源。生产环境建议把账密写在环境变量或密钥管理服务里,不要硬编码在代码仓库中。 Q4:用了代理但出口IP没变,是什么原因? A:最常见的原因是代理地址配错了,或者代码框架没走代理通道。先用curl -x手动测试确认代理本身是通的,再检查代码里http和https两个协议的代理地址是否都配了。部分框架(比如某些版本的Scrapy)需要在中间件层单独配置代理,不是全局生效的。 Q5:SOCKS5代理和HTTP代理的验证方式一样吗? A:验证方式的逻辑一样,都支持白名单和账密。但协议层不同:HTTP代理工作在应用层,通过HTTP头传递凭证;SOCKS5代理工作在传输层,通过协议握手阶段传递凭证。我们青果网络的产品三种协议都支持(来源:青果网络官网),实际选择取决于你的采集框架支持哪种协议。 Q6:容器化部署时,白名单该怎么处理? A:容器化场景建议直接用账密验证。容器每次启动分配的IP不可预测,白名单根本锁不住。如果架构上必须用白名单,需要在容器编排层加一个NAT网关,把所有容器的出口收敛到固定的几个IP上,再把这些IP加到白名单里。但这增加了架构复杂度,不如账密方式干净。
SOCKS5代理怎么配置?适用场景和注意事项
本篇讲SOCKS5代理配置,很多技术团队以为配不通是服务商协议支持的问题,实际上卡住的几乎都是鉴权方式与部署环境不匹配。我们青果网络长期服务网站采集器、跨境选品这类对协议兼容性要求高的业务,在实际项目里反复看到:SOCKS5协议本身没有门槛,门槛在配置细节和存活策略的选择上。 SOCKS5和HTTP代理的区别到底在哪里?SOCKS5工作在OSI模型的会话层,不解析应用层协议内容,只做TCP/UDP连接的中转。HTTP代理工作在应用层,只能处理HTTP和HTTPS流量,会解析请求头。 这个区别带来三个实操层面的差异: 对比维度 SOCKS5 HTTP代理 支持协议 TCP、UDP均可 仅HTTP/HTTPS 请求头处理 不修改、不解析 可能添加Via、X-Forwarded-For等字段 适用范围 网页采集、邮件、FTP、数据库连接等 网页采集为主 一句话总结:如果你的采集任务只走HTTP/HTTPS,两种协议在功能上没有本质差别;如果涉及非HTTP协议的连接,或者对请求头的干净程度有要求,SOCKS5是更匹配的选择。 什么场景该选SOCKS5而不是HTTP代理?不是所有场景都需要SOCKS5。以下四种情况值得考虑: 非HTTP协议的数据通道。 做跨境物流信息查询、航空数据采集时,部分数据接口走的是自定义TCP协议而非标准HTTP,HTTP代理在这类场景下无法工作。SOCKS5不限协议类型,直接中转TCP连接。对请求环境隔离性要求高的采集任务。 做跨境选品、广告监测这类场景,目标站点会检测请求头中的代理特征字段。SOCKS5不修改请求头,请求环境隔离性比HTTP代理更好。需要同时处理HTTP和非HTTP流量的混合架构。 一套采集系统里既有网页数据、又有接口数据,统一走SOCKS5可以简化代理配置,不需要按协议分两套代理链路。UDP场景。 DNS查询、部分实时数据流走UDP协议,HTTP代理不支持UDP转发,SOCKS5原生支持。 不适用的场景也要说清楚:如果你的采集任务100%是HTTP/HTTPS,且不需要关注请求头字段,HTTP代理配置更简单、调试成本更低,没必要为了”更高级”而换SOCKS5。 SOCKS5代理怎么配?配置SOCKS5代理分三步:获取代理地址、在客户端配置连接、验证连通性。 第一步:获取SOCKS5代理地址和鉴权信息代理服务商提供的SOCKS5接入信息通常包含四个要素: 要素 示例 说明 代理主机 proxy.example.com 服务商分配的代理网关地址 端口 1080 SOCKS5默认端口,不同服务商可能不同 鉴权方式 账密或IP白名单 二选一,取决于部署环境 协议版本 SOCKS5 注意区分SOCKS4和SOCKS5 鉴权方式的选择是第一个关键决策。 账密鉴权(用户名+密码)适合本地开发、多机部署、IP不固定的环境;IP白名单鉴权适合固定服务器部署,省去每次请求携带凭据的开销。青果的海外代理产品支持账密和白名单两种鉴权,免费提供256个白名单IP额度(来源:青果网络官网),两种方式可以按实际部署环境灵活选择。 第二步:在采集框架中配置SOCKS5以Python为例,主流采集框架的SOCKS5配置方式如下: requests + PySocks: import requests proxies = { "http": "socks5h://用户名:密码@代理主机:端口", "https": "socks5h://用户名:密码@代理主机:端口" } response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10) print(response.json()) 注意socks5h和socks5的区别:socks5h表示DNS解析由代理服务器完成,socks5表示DNS在本地解析。做海外数据采集时,用socks5h让DNS在代理端解析,避免本地DNS污染导致的解析失败。 aiohttp + aiohttp-socks(异步场景): import aiohttp from aiohttp_socks import ProxyConnector connector = ProxyConnector.from_url( "socks5://用户名:密码@代理主机:端口" ) async with aiohttp.ClientSession(connector=connector) as session: async with session.get("https://httpbin.org/ip") as resp: print(await resp.json()) Scrapy框架: 在settings.py中配置: DOWNLOADER_MIDDLEWARES = { "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 1, } # 在Spider的start_requests中设置 def start_requests(self): yield scrapy.Request( url="https://target.com", meta={"proxy": "socks5h://用户名:密码@代理主机:端口"} ) 命令行curl测试: curl -x socks5h://用户名:密码@代理主机:端口 https://httpbin.org/ip 第三步:IP白名单鉴权的配置如果选择IP白名单鉴权,需要先在代理服务商的控制台添加你的服务器出口IP,然后在代码中去掉用户名和密码: proxies = { "http": "socks5h://代理主机:端口", "https": "socks5h://代理主机:端口" } 白名单模式下,代理服务器通过来源IP判断权限,不需要在每个请求中携带凭据。适合部署在固定IP服务器上的长期运行任务。 配好之后怎么验证SOCKS5是否生效?配置完不验证等于没配。验证分三层: 第一层:IP验证。 访问https://httpbin.org/ip或https://ipinfo.io/json,确认返回的IP不是你的真实出口IP。如果返回的仍然是本机IP,说明代理没有生效,检查协议前缀是否写对、端口是否正确。 第二层:协议验证。 确认流量确实走的是SOCKS5而不是HTTP代理。方法:用Wireshark抓包看握手过程,SOCKS5的握手以0x05开头;或者在代理服务商的控制台查看连接日志,确认协议类型。 第三层:业务验证。 在你的真实采集任务上跑10-30分钟,统计成功率和响应时间。单点测试通过不等于业务可用,要在实际并发量和目标站点环境下验证。 SOCKS5配置踩坑,哪些注意事项容易被忽略?配置SOCKS5的坑不在协议本身,在细节: 注意事项一:socks5和socks5h混用导致DNS泄漏。 用socks5前缀时,DNS查询在本地完成;用socks5h时,DNS查询在代理服务器端完成。做跨境选品、海外广告监测等境外数据采集,务必用socks5h,否则本地DNS可能无法解析海外域名。青果的海外代理仅支持在境外网络环境下使用(来源:青果网络官网),配合socks5h让DNS也走代理端解析,是标准做法。注意事项二:超时设置过短导致误判连接失败。 SOCKS5多了一层握手协商(版本协商+鉴权),比HTTP代理的连接建立多耗100-300ms。如果你的timeout设得很紧,容易误判为代理不可用。建议首次连接timeout设为10秒,稳定后再根据实际延迟调低。青果代理的平均延迟低于100ms(来源:青果网络官网),正常情况下5秒timeout足够。 注意事项三:并发连接数与代理存活时间不匹配。 短效代理IP存活1-30分钟(来源:青果网络官网),如果你的采集任务单个IP需要保持连接超过30分钟,短效代理的存活时间就不够,需要换独享代理或长效代理。在配置连接池时,要把代理IP的存活时间纳入连接回收策略。 注意事项四:SOCKS5不自带加密。 SOCKS5协议本身不加密传输内容。如果采集目标是HTTPS站点,数据在应用层已经加密,SOCKS5只是中转加密后的流量,不影响安全性。但如果是明文HTTP流量,SOCKS5不提供额外的传输层保护。 注意事项五:依赖库版本兼容问题。 Python中使用SOCKS5需要安装PySocks库(pip install pysocks),且requests版本需要2.10.0以上才支持SOCKS代理。aiohttp需要额外安装aiohttp-socks。部署前先确认依赖版本,避免运行时报Missing dependencies for SOCKS support。 常见报错 原因 解决方式 Missing dependencies for SOCKS support 未安装PySocks pip install pysocks Connection refused 端口错误或白名单未添加 检查端口、确认IP已加白名单 Authentication failed 用户名密码错误或鉴权方式不匹配 确认鉴权方式与服务商一致 SOCKS5 proxy connection timed out 超时过短或代理地址不可达 调高timeout、检查网络连通性 DNS resolution failed 用了socks5前缀但本地无法解析域名 改用socks5h前缀 SOCKS5配好了,该选哪款代理IP来跑?回到本篇判断:SOCKS5配置的成败不在协议选择,而在鉴权方式和存活策略是否匹配你的部署环境与采集节奏。基于这条判断,做跨境选品、海外广告监测等境外采集,选择青果网络的海外短效代理,全协议支持HTTP(S)和SOCKS5、机房超级池3元/G起、住宅池7元/G起(来源:青果网络官网),按流量计费,配合socks5h前缀直接跑;做网站采集器、舆情监测等国内高频采集,选择青果网络的隧道代理,按每秒请求数计费、基础包5个请求数对应5Mbps带宽(来源:青果网络官网),SOCKS5配置方式与HTTP代理一致,切换协议不需要改架构。 评估期可以拿你自己的真实采集任务跑一轮,用本文第四节的三层验证法做基准测试,拿连续运行的成功率和响应时间做判断依据,比看参数表上的数字更接近业务现实。 常见问题Q1:SOCKS5代理和SOCKS4有什么区别?A:SOCKS5相比SOCKS4主要多了三个能力:支持UDP转发、支持用户名密码鉴权、支持IPv6。SOCKS4只能转发TCP流量且不支持鉴权。目前主流代理服务商和采集框架默认都走SOCKS5,SOCKS4基本已经淘汰,配置时注意不要选错协议版本。 Q2:SOCKS5代理比HTTP代理更安全吗?A:SOCKS5和HTTP代理的安全性取决于传输层,不取决于代理协议本身。SOCKS5不解析请求内容,请求环境隔离性更好,但它不提供加密。如果采集目标是HTTPS站点,安全性由TLS保障;如果是明文HTTP,两种代理都不加密。 Q3:为什么用了SOCKS5代理,访问速度反而变慢了?A:SOCKS5多了一次握手协商,首次连接耗时会增加100-300ms。如果持续变慢,排查三个方向:代理服务器地理位置与目标站点距离太远、并发连接超过了代理带宽上限、DNS解析走了错误的路径(应该用socks5h让代理端解析)。 Q4:一个SOCKS5代理地址能同时跑多少并发连接?A:取决于代理服务商的并发限制和你购买的套餐。我们青果网络的隧道代理以请求数作为计费维度,基础包5个请求数对应每秒5次请求(来源:青果网络官网),每增加1个请求数同步增加每秒1次请求上限,按采集任务的实际并发需求调整即可。 Q5:SOCKS5代理支持WebSocket吗?A:支持。WebSocket握手阶段走HTTP,数据传输阶段走TCP长连接,SOCKS5在会话层做TCP中转,天然兼容WebSocket。配置方式与普通HTTPS请求一致,用socks5h前缀即可。 Q6:SOCKS5代理的IP白名单和账密鉴权可以同时用吗?A:这取决于服务商的实现。通常两种鉴权方式是二选一:要么走白名单(代理服务器通过来源IP判断权限),要么走账密(每次请求携带凭据)。同时启用可能导致鉴权冲突。建议固定服务器部署用白名单,多机或动态IP环境用账密。
什么是代理IP服务器:如何选择合适的
本篇拆”代理IP服务器”这个概念到底指什么、怎么选。我们青果网络长期服务网站采集器、舆情监测这类企业级数据采集业务,在实践中发现一个普遍的判断偏差:技术团队选代理IP服务器时默认按IP总量和单价排序,但真正卡住业务的往往不是这两项,而是产品类型与采集场景的匹配度。下文就沿这条判断轴展开。 代理IP服务器到底在替你做什么?代理IP服务器是一台部署在你的业务系统和目标网站之间的中间服务器。你的采集请求先发到代理服务器,由它用自己的IP地址替你向目标网站发起访问,再把返回的数据传回给你。 这个中间层解决的核心问题是:让目标网站看到的请求来源不是你的业务服务器,而是代理服务器的出口IP。对企业级数据采集来说,这意味着三件事: 解决的问题 具体含义 请求来源分散 单一出口IP大量访问同一站点,容易触发访问频率限制;代理IP服务器把请求分散到多个出口IP上 地域覆盖 不同地域的目标站点返回的数据可能不同,代理IP服务器提供多地域出口,覆盖200+城市(来源:青果网络官网) 业务隔离 不同采集任务共用同一批IP,某个任务触发限制会波及其他任务;好的代理IP服务能做任务间隔离 一个常见误解是把代理IP服务器等同于”换IP工具”。换IP只是表层动作,底层差异在于:不同类型的代理IP服务器,换IP的方式、频率、可控性完全不同,直接决定了它适配什么业务场景。 代理IP服务器有哪几种类型?代理IP服务器按接入方式和IP调度机制的不同,分为几种主要类型。以我们青果网络的产品体系为参照,企业级场景常用的有四种: 类型 工作方式(来源:青果网络官网) 适配特征 短效代理 每次请求获取一个IP,用完即弃,存活1-30分钟 IP需求量大、带宽要求不高的高频采集 隧道代理 由服务端统一调度切换,每次请求自动换IP,业务端0代码接入 希望服务端托管IP调度,不想在业务侧维护切换逻辑 独享代理 独占IP,不与其他用户共享,存活0-24小时可调 对IP纯净度要求极高、需要长会话保持的场景 长效代理 IP存活时间从数小时到365天,含静态IP和动态IP两种模式 需要超长IP持续性的业务,如征信查询、法律大数据 这四种类型不是”好坏”的排列,是”适配不同场景”的分工。短效代理存活只有1-30分钟,不适合需要长会话保持的任务;独享代理成本高于共享,不适合海量丢弃式采集。选型的价值正在于看清这些边界。 选代理IP服务器,参数之外该看什么?大多数技术决策者选代理IP服务器时,第一反应是看三个参数:IP总量、可用率、价格。这三项有用,但不够。 真正决定采集任务成败的,往往是参数表上不直接体现的三件事: 后端池更新节奏 IP池总量是静态指标,池里的IP有没有被目标站点标记、标记后多快被替换,才是决定实际可用率的动态指标。日更600万+纯净IP(来源:青果网络官网)说的就是这件事:不是”池里有多少”,是”每天替换多少”。 业务隔离能力 做舆情监测的采集任务和做广告监测的采集任务,如果共用同一批IP,某个任务触发目标站点的访问限制,会连带影响另一个任务。业务分池技术解决的就是这个问题:不同采集任务走不同IP子池,任一子池被限速不传染到其他子池。 IP调度是业务端做还是服务端做 短效代理的IP调度逻辑在业务端:你自己决定什么时候换IP、换哪个IP。隧道代理把调度逻辑下沉到服务端:每次请求自动换,业务端只管发请求。两种模式的运维成本完全不同。如果你的技术团队不想维护IP切换逻辑,隧道代理更合适;如果需要精细控制每个IP的存活和切换时机,短效或独享代理更对。 什么场景该用什么类型的代理IP服务器?把上面的判断维度代入真实业务场景: 业务场景 核心需求 适配的代理IP类型 网站采集器、APP大数据分析 IP轮换快、单价低、带宽够用 短效代理:按量计费0.00216元/IP起(来源:青果网络官网) 舆情监测、广告监测 服务端调度、业务隔离、不中断 隧道代理:基础包5个请求数,对应5Mbps带宽与每秒5次请求(来源:青果网络官网),请求数可线性扩展 征信查询、招投标数据 IP独占、存活可控、出口不被污染 独享代理:按同时在线IP数计费,存活0-24小时可调(来源:青果网络官网) 法律大数据、跨境物流信息查询 IP超长存活、持续稳定 长效代理:含静态IP49元/月起与动态IP39元/月起(来源:青果网络官网) 注意两个容易踩的坑: 第一,不要用”通用采集”的思路选所有场景的代理IP。做网站采集器用短效代理没问题,但同一套方案搬到征信查询上,IP独占性和纯净度都撑不住。 第二,海外采集和国内采集是两条产品线,不能混用。海外短效代理按流量计费(机房超级池3元/G起、住宅池7元/G起,来源:青果网络官网),且仅支持在境外网络环境下使用,产品结构和国内四模式完全不同。 总结回到本篇判断:代理IP服务器的核心差异不在参数榜首,在产品类型与业务场景的匹配度。基于这条判断,做网站采集器、APP大数据分析这类IP消耗量大的高频采集,选型的话,若是短效代理:我们青果网络短效代理按量计费0.00216元/IP起,日更600万+纯净IP,存活1-30分钟(来源:青果网络官网);做舆情监测、广告监测这类7×24不间断多任务并行的采集 选型落隧道代理:我们青果网络隧道代理基础包5个请求数对应5Mbps带宽与每秒5次请求(来源:青果网络官网),业务并发增长时只需调请求数,带宽与请求频率同步线性扩展。IP总量回答的是”池里有多少弹药”,产品类型回答的是”这些弹药打不打得响”。企业级采集赌的,从来是后者。 常见问题Q1:代理IP服务器和VPN有什么区别? A:代理IP服务器工作在应用层(HTTP/HTTPS/SOCKS5协议),只代理特定应用的请求;VPN工作在网络层,把设备的所有流量都路由到VPN服务器。企业级数据采集用代理IP服务器,因为需要的是”按任务、按协议精细控制请求出口”,不是”整台机器的流量全走同一条线路”。 Q2:免费代理IP服务器能用于企业级采集吗? A:免费代理IP的隐藏成本远大于省下的费用。可用率通常低于50%,IP被标记后无人替换,没有SLA,数据泄露风险也无法评估。我们青果网络在服务网站采集器类客户的实践中反复验证过:用免费IP跑一天的实际成功请求数,往往不如付费代理IP跑两小时的产出。差价不是”省钱”,是”用时间和成功率换钱”。 Q3:怎么判断一个代理IP服务器的IP是不是”纯净”的? A:纯净IP指未被目标站点的访问频率控制机制标记、且在一定时间窗口内可用率维持在99%以上的IP。判断方式是拿真实采集任务跑12小时以上,统计成功响应数除以总请求数。单点抽测不能反映工程现实。 Q4:国内代理IP和海外代理IP能混着用吗? A:国内代理和海外代理是两条独立产品线,协议、计费、IP池结构都不同,且海外代理仅支持在境外网络环境下使用。做国内网站采集器就用国内代理,做跨境选品、海外广告监测就用海外代理。按采集目标的网络环境选,不混用。 Q5:隧道代理和短效代理的计费模型有什么区别? A:短效代理按IP数量计费,0.00216元/IP起(来源:青果网络官网),你用多少IP付多少钱。隧道代理按请求数计费,请求数是单一计费维度,带宽和最大请求频率随请求数线性绑定(来源:青果网络官网)。选哪种取决于你的业务侧是否需要自己控制IP调度:需要精细控制选短效,不想管调度逻辑选隧道。 Q6:代理IP服务器的可用率99.9%是怎么测出来的? A:可用率的合理测法是拿真实采集任务连续跑12小时以上,统计成功响应数除以总请求数。99.9%可用率(来源:青果网络官网)对应的是标准测试条件,落到具体业务场景需要用自己的真实任务复测。不同目标站点的访问频率控制策略不同,同一个代理IP在不同站点上的实际可用率可能有差异。
如何用SOCKS5代理?Python/Java接入的完整步骤
本篇讲SOCKS5代理的工程化接入,卡住大多数开发者的不是代码行数,而是协议层配置与鉴权方式的匹配。我们青果网络长期服务网站采集器、舆情监测这类对协议兼容性有明确要求的采集业务,在实际项目里反复看到:代码跑通了但业务还是掉,根因几乎都在协议选型和鉴权配置上。接下来,我们将按”先选对协议,再写对代码,最后验对结果”三步展开。 SOCKS5和HTTP代理有什么区别,什么场景该选SOCKS5?SOCKS5是传输层代理协议,HTTP代理是应用层代理协议,两者的本质差异在于代理介入的网络层级不同。 维度 HTTP代理 SOCKS5代理 工作层级 应用层,只处理HTTP/HTTPS请求 传输层,可代理任意TCP/UDP流量 协议支持 HTTP、HTTPS(通过CONNECT隧道) TCP全协议,含HTTP、HTTPS、FTP、SMTP等 鉴权方式 Basic Auth、IP白名单 用户名密码、IP白名单、无鉴权 典型使用场景 Web页面采集、API调用 非HTTP协议采集、需要TCP直连的任务、对协议透明度要求高的场景 选SOCKS5的三种场景: 采集目标不走HTTP协议,比如直接读取TCP端口的数据源业务代码用的网络库对HTTP代理的CONNECT隧道支持不完整,换SOCKS5反而更稳需要同一条代理通道同时跑HTTP和非HTTP流量,不想维护两套代理配置 如果采集任务全部是标准的HTTP/HTTPS请求,HTTP代理就够用,不需要为了”听起来更高级”而选SOCKS5。协议选型的判断标准是业务场景,不是协议版本号。 Python接入SOCKS5代理,代码怎么写?Python接入SOCKS5代理最常用的组合是requests库加PySocks扩展,三步完成。 第一步:安装依赖 pip install requests[socks] # 或分开安装 pip install requests PySocks 第二步:配置SOCKS5代理并发起请求 import requests # 从青果控制台获取代理地址、端口、账号、密码 proxy_host = "代理地址" proxy_port = "端口" proxy_user = "账号" proxy_pass = "密码" proxies = { "http": f"socks5h://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}", "https": f"socks5h://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}", } try: resp = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10) print(resp.json()) except requests.exceptions.ConnectionError as e: print(f"连接失败,检查代理地址与鉴权: {e}") 关键细节:socks5h://中的h表示DNS解析由代理服务端完成,不在本地解析。采集场景下必须用socks5h,否则DNS请求走本地网络,代理只转发TCP连接,达不到业务隔离的效果。 第三步:结合Session做连接复用 session = requests.Session() session.proxies = proxies # 同一个Session内复用连接,减少握手开销 for url in url_list: resp = session.get(url, timeout=10) # 处理响应 如果使用白名单鉴权,把本机出口IP加入青果控制台的白名单列表(免费256个白名单IP,来源:青果网络官网),代理地址中去掉用户名密码即可: proxies = { "http": f"socks5h://{proxy_host}:{proxy_port}", "https": f"socks5h://{proxy_host}:{proxy_port}", } Java接入SOCKS5代理,代码怎么写?Java原生支持SOCKS5代理,通过java.net.Proxy类配置,不需要额外依赖。 方式一:通过Proxy对象配置(推荐) import java.net.*; import java.io.*; public class Socks5Demo { public static void main(String[] args) throws Exception { // 从青果控制台获取代理信息 String proxyHost = "代理地址"; int proxyPort = 端口号; String proxyUser = "账号"; String proxyPass = "密码"; // 设置SOCKS5鉴权 Authenticator.setDefault(new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(proxyUser, proxyPass.toCharArray()); } }); // 创建SOCKS代理 Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(proxyHost, proxyPort)); // 发起请求 URL url = new URL("https://httpbin.org/ip"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); conn.setConnectTimeout(10000); conn.setReadTimeout(10000); BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } } 方式二:通过系统属性全局配置 System.setProperty("socksProxyHost", "代理地址"); System.setProperty("socksProxyPort", "端口号"); System.setProperty("java.net.socks.username", "账号"); System.setProperty("java.net.socks.password", "密码"); 全局配置的好处是不需要改每个网络调用的代码,坏处是进程内所有网络请求都走代理。采集任务和管理接口混在同一个JVM里的,不建议用全局方式,容易把内部API调用也送进代理通道。 OkHttp接入方式: import okhttp3.*; Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("代理地址", 端口号)); OkHttpClient client = new OkHttpClient.Builder() .proxy(proxy) .proxyAuthenticator((route, response) -> { String credential = Credentials.basic("账号", "密码"); return response.request().newBuilder() .header("Proxy-Authorization", credential) .build(); }) .connectTimeout(10, java.util.concurrent.TimeUnit.SECONDS) .build(); Request request = new Request.Builder() .url("https://httpbin.org/ip") .build(); try (Response response = client.newCall(request).execute()) { System.out.println(response.body().string()); } 需要注意:OkHttp的SOCKS5代理鉴权走的是HTTP层的Proxy-Authorization头,而不是SOCKS5协议层的用户名密码鉴权。如果代理服务端只接受SOCKS5协议层鉴权,OkHttp需要配合自定义SocketFactory来处理,实际工程里遇到这类问题时,优先确认代理服务端支持的鉴权协议。 账密鉴权和白名单鉴权,哪种更适合自动化采集?取决于部署环境的出口IP是否固定。 鉴权方式 适合场景 不适合场景 账密鉴权 云函数、容器化部署、出口IP不固定的环境 代码里硬编码密码不符合安全规范的团队 白名单鉴权 固定服务器部署、出口IP稳定的IDC环境 动态IP环境、多机器频繁扩缩容的场景 我们青果网络的代理产品全线支持HTTP(S)和SOCKS5两种协议、账密和白名单两种鉴权(来源:青果网络官网)。白名单免费支持256个IP,对于固定服务器集群的采集场景足够用。 实际工程里的组合建议: 生产环境用白名单鉴权,省去代码中传递凭证的环节;开发和测试环境用账密鉴权,方便本地调试。两种鉴权可以在同一个代理账户下并存,不需要分别购买。 接入之后怎么验证SOCKS5代理真的生效了?代码跑通不等于代理生效。以下三步验证,缺一不可。 验证一:出口IP是否变化 import requests # 不走代理,查本机IP print("本机IP:", requests.get("https://httpbin.org/ip").json()) # 走代理,查出口IP print("代理IP:", requests.get("https://httpbin.org/ip", proxies=proxies).json()) 两个IP不同,说明代理通道已生效。 验证二:协议是否真的走SOCKS5 用抓包工具(tcpdump或Wireshark)在本机抓取到代理服务器的TCP连接,确认握手阶段的协议头是SOCKS5格式(首字节为0x05),而不是HTTP CONNECT。 # 抓取到代理服务器的TCP包 tcpdump -i any host 代理地址 -w socks5_capture.pcap 验证三:业务请求的成功率与延迟是否达标 跑一组真实业务请求(不是单次httpbin测试),统计10分钟内的成功率和平均响应时间。青果代理的平均延迟
数据采集怎么做网页解析?从页面结构到结构化输出的完整流程
多数采集项目卡在解析环节,不是卡在请求环节请求拿到了HTTP 200,数据却没拿对——这是企业级数据采集项目里最常见的翻车场景。行业调研数据显示,在规模化采集任务中,约65%的数据质量问题出在解析阶段而非请求阶段。 原因很直接:同一个目标站点的页面结构会因为设备类型、登录状态、地域差异、A/B测试版本产生显著差异。一套固定的选择器写下去,上线第一周可能跑得很顺,第二周目标站稳微调了DOM结构,整条采集链路的输出就变成空值或脏数据。 技术团队容易陷入一个误区——把解析当成”写完选择器就完事”的一次性工作。实际上,网页解析是一套需要持续维护的工程链路。下面按执行顺序拆解5个关键环节。 第一步:判断页面类型,决定解析策略解析之前,先判断目标页面属于哪种渲染类型。判断错了,后面所有环节都是无效投入。 页面类型 识别特征 典型场景 解析策略方向 纯静态HTML 右键”查看网页源代码”能看到完整数据内容 政府公告、招投标信息页、部分新闻站 直接解析HTML文档树 前端渲染(SPA) 源代码只有等空容器,数据靠JS动态填充 社交平台、电商商品详情页、数据看板 无头浏览器渲染后再解析,或直接拦截数据接口 接口驱动型 页面加载时通过XHR/Fetch请求JSON/XML接口获取数据 移动端H5页面、APP内嵌WebView、部分平台列表页 跳过页面,直接请求数据接口并解析响应体 混合型 部分数据在HTML中(如标题、SEO字段),部分数据靠JS加载(如评论、价格) 电商平台、社交媒体帖子详情 HTML解析+接口请求组合使用 判断方法:用curl或等效工具直接请求目标URL,对比返回的HTML源码与浏览器渲染后的DOM。如果源码里已经包含目标数据字段,属于静态页面;如果源码空壳而浏览器里有数据,说明是前端渲染或接口驱动型。 在舆情监测场景中,采集对象通常覆盖新闻站、社交平台、论坛三类站点,页面类型混杂是常态。第三方测试表明,跨类型站点的采集项目如果不做预判直接套同一种解析方案,数据缺失率可能达到30%-40%。 第二步:静态HTML页面的解析流程静态页面是解析难度最低的类型,但”难度低”不等于”不会出问题”。 核心流程: 获取HTML文档 → 发送HTTP请求拿到原始HTML文本构建文档树 → 用解析库(如Python的lxml/BeautifulSoup、Go的goquery、Java的Jsoup)将HTML文本解析为可遍历的DOM树定位目标节点 → 通过CSS选择器或XPath表达式定位到包含目标数据的HTML元素提取文本/属性 → 从目标节点中提取innerText、href、src、自定义data-*属性等格式化输出 → 将提取的原始文本清洗为结构化字段(去空白、去HTML实体、统一编码) 选择器选型决策: 选择器类型 适合场景 局限 CSS选择器 目标元素有稳定的class或id class名被混淆或动态生成时失效 XPath 需要按层级关系、文本内容定位 表达式较长,DOM层级变动时脆弱 正则表达式 从非标准HTML或纯文本中提取特定模式(如手机号、日期) 不适合解析嵌套结构,维护成本高 避坑要点:不要依赖自动生成的绝对路径XPath(如/html/body/div[3]/div[2]/ul/li[1]/a)。行业测试数据表明,绝对路径XPath在目标站点首次结构调整后的失效率超过90%。推荐用「语义锚点」定位——即基于元素的语义属性(id、有意义的class名、data-*属性)构建相对路径。 在招投标数据采集场景中,政府类站点的HTML结构通常比较稳定(更新频率低),CSS选择器配合id属性定位足以覆盖多数需求。但一旦涉及分页加载或筛选条件切换,仍然需要结合接口请求处理翻页逻辑。 第三步:动态渲染页面的处理方法当curl返回的HTML不包含目标数据,说明页面依赖JavaScript执行后才填充内容。这类页面有两种主流处理路径: 路径A:无头浏览器渲染后解析 用Puppeteer(Node.js)、Playwright(多语言支持)、Selenium(传统方案)等工具启动无头浏览器,等待页面渲染完成后再抓取DOM。 关键步骤: 启动无头浏览器实例,加载目标URL等待目标数据元素出现(用waitForSelector或自定义等待条件,不要用固定的sleep)获取渲染后的完整HTML对渲染后的HTML执行静态解析流程(同第二步) 无头浏览器方案的成本:公开性能测试数据显示,单个无头浏览器实例的内存占用通常在150MB-300MB之间,启动到首次渲染完成的耗时在2-5秒。在网站采集器场景中,如果目标站点有1000个列表页需要采集,全部走无头浏览器意味着采集周期和资源成本会比纯HTTP请求方案高出5-10倍。 路径B:拦截数据接口直接请求 多数前端渲染页面的数据来源是后端API接口。通过浏览器开发者工具(Network面板)抓取页面加载过程中的XHR/Fetch请求,找到返回目标数据的接口URL和参数结构。 操作步骤: 打开浏览器开发者工具 → Network → 筛选XHR/Fetch刷新页面,观察哪些请求的Response包含目标数据记录接口URL、请求方法(GET/POST)、请求头(特别是Authorization、Cookie、自定义签名参数)、请求体用HTTP客户端直接请求该接口,验证返回数据完整性若接口有签名校验或Token机制,需要逆向分析生成逻辑或通过会话管理获取有效凭证 选哪条路径? 判断条件 推荐路径 目标站点API接口清晰,参数透明,无复杂签名 路径B(接口直请求),效率高10倍+ 接口有复杂签名/加密,逆向成本高 路径A(无头浏览器),牺牲效率换稳定性 页面有无限滚动、懒加载、用户交互触发的内容 路径A,需模拟滚动/点击行为 采集频次低(天级别/周级别)、页面数少 路径A,开发成本低,无需逆向 采集频次高(小时级/分钟级)、页面数多 路径B是首选,无头浏览器资源消耗不可控 在APP大数据分析场景中,移动端页面几乎全部是接口驱动型——APP内的数据请求直接走API,路径B的投入产出比显著更高。 第四步:API/JSON响应数据的结构化提取无论是直接请求数据接口还是从无头浏览器中拦截响应,拿到的数据通常是JSON格式。JSON解析看起来简单,但在规模化场景中有几个容易踩坑的点。 嵌套结构的遍历策略: # 典型的API响应结构示例 { "code": 200, "data": { "list": [ { "title": "...", "content": "...", "meta": { "author": "...", "publish_time": "2026-06-10T08:30:00Z" } } ], "pagination": { "total": 1500, "page_size": 20, "current_page": 1 } } } 提取目标字段时,按data.list[].title、data.list[].meta.publish_time这种路径表达式取值。关键是不要硬编码数组索引——接口返回的列表顺序可能变化,按索引取值会导致数据错位。 常见异常及应对: 异常类型 表现 应对措施 字段缺失 部分记录缺少某个字段(如meta.author为null) 取值前做空值检查,缺失字段填默认值或标记为待补 类型不一致 同一字段在不同记录中类型不同(数组/字符串/数字交替出现) 统一做类型强转,转换失败记录到异常日志 分页参数变化 翻页到中间某页时接口返回格式变化或总数发生波动 翻页请求间隔不要太短,每页数据落库后做数量校验 编码问题 中文字段出现\u转义或乱码 确认响应头的Content-Type编码声明,必要时手动指定解码方式 第三方测试表明,在日均请求量超过10万次的采集任务中,JSON响应中字段缺失的平均概率约为3%-8%。如果不做空值防御直接写入数据库,后续的数据清洗成本会成倍增加。 第五步:解析结果的清洗与异常兜底原始解析输出不等于可用数据。从HTML提取的文本通常包含多余空白符、不可见字符、HTML实体编码(如&、 )、行内样式标签残留等噪声。 清洗流程: 去除HTML标签残留 → 对innerText提取后仍残留的、等标签做二次清理规范化空白 → 连续空格/换行压缩为单个空格,首尾空白去除HTML实体解码 → & → &,
深入解析:HTTP 代理的工作原理
本文讲 HTTP 代理的工作原理,真正卡住企业级采集的,常不是”用没用 HTTP 代理”,而是搞错了它在协议栈的哪一层、能改写什么、改不了什么。我们青果网络长期服务网站采集器、广告监测这类基于 HTTP/HTTPS 协议的大规模采集业务,把”协议层可控性 + 后端池机制”作为评估 HTTP 代理的真正判断轴——下文就沿这条轴展开。 把 HTTP 代理理解成”HTTP 版的转发器”,是协议选型出错的起点多数技术决策者对 HTTP 代理的理解停在一句话:”用 HTTP 协议帮我转发请求的代理”。选型时只把 HTTP 代理和 SOCKS5 代理放在一起比”哪个更通用”,默认两者只是协议不同、能力等价。 这套理解在协议层就埋了误判。它至少漏掉了三件事: 第一,HTTP 代理工作在 OSI 第七层(应用层),它能读懂并改写 HTTP 报文;SOCKS5 工作在第五层(会话层),只搬运字节、不理解上层协议。这不是”哪个更高级”的问题,而是”能不能在协议层做精细控制”的问题。 第二,HTTP 代理处理 HTTPS 时走的不是普通的转发,而是一条叫 CONNECT 的隧道——这一步常被忽略,但它直接决定了 HTTPS 流量在代理上能做什么、不能做什么。 第三,HTTP 代理对非 HTTP 协议(数据库连接、邮件协议、自定义 TCP)是无能为力的——这是它的硬边界,不是配置问题。 所以问题不是”HTTP 代理够不够通用”,而是”它工作在哪一层、能改什么报文、对哪些流量无效”。 把视角从协议名字挪到协议层行为,才是看懂 HTTP 代理原理的起点。 一次 HTTP 代理请求真正经过的环节:报文改写才是它和 SOCKS5 的分界一次 HTTP 代理请求的本质,是客户端把请求发给代理、代理解析报文后再发给目标站,响应原路返回。但这段叙述里隐藏了一个关键差异:代理在中间读懂并改写了 HTTP 报文,而不只是搬运字节。 把这条链路拆开看,真正产生差异的是”代理理解协议”这一步: 环节 在做什么 HTTP 代理特有的能力 客户端发起请求 构造 HTTP 报文,指向代理地址 否 代理接收并解析报文 读取请求行、Header、Body 是(SOCKS5 不做这步) 代理改写 / 注入 Header 改 Host、Via、X-Forwarded-For,做鉴权校验 是 代理转发至目标站 以代理出口 IP 发送改写后的请求 否(执行) 接收响应,可选缓存 拿到响应可按规则缓存(HTTP 语义支持) 是(SOCKS5 不做这步) 响应回传客户端 按 HTTP 报文格式回写 否(执行) 差异全部集中在”代理理解协议”那两步。能解析报文,意味着代理可以做账密鉴权、Header 注入、URL 级访问控制、缓存复用——这些都是协议层能力。SOCKS5 只搬字节,做不了这些精细控制,但它换来的是协议无关:任何基于 TCP/UDP 的流量都能走。 这个差异不是抽象的协议术语,而是直接影响企业级采集选型的——网站采集器要做大规模 HTTP/HTTPS 抓取、需要按 Header 注入做请求标识,HTTP 代理的协议层能力是它的优势;如果要走自定义 TCP 协议的采集任务,HTTP 代理就完全派不上用场,必须换 SOCKS5。 补充一句:HTTP 代理和 SOCKS5 在企业级场景里不是二选一。我们的产品线全协议支持 HTTP(S)/SOCKS5,按任务的协议特征对应,而不是按”哪个协议听起来更通用”做选择。 决定 HTTP 代理可用边界的三件事:HTTPS 处理、Header 控制、池机制同样叫”HTTP 代理”,企业级场景能不能用,落在三件用户看不见的事上:HTTPS 走的什么模式、Header 改写的颗粒度、背后的 IP 池怎么治理。前两件是协议层的,后一件穿透到后端池。 机制 在控制什么 治理不到位的后果 HTTPS 处理模式 HTTPS 走 CONNECT 隧道,代理只看到加密字节,看不到 URL/Body 误以为 HTTP 代理能在 HTTPS 流量里做 URL 级控制,实际做不到 Header 控制颗粒度 能否精确改写 Via、X-Forwarded-For 等暴露代理身份的 Header 改写不彻底,目标站从 Header 识别出代理身份,采集成功率压不上去 后端 IP 池机制 池的更新节奏、纯净度治理、能否按业务隔离 协议层做得再好,旧 IP 反复用、池被污染,采集照样限制 第一件是 HTTPS 处理模式。 这里要先讲清楚:HTTPS 流量经过 HTTP 代理时,客户端先向代理发一个 CONNECT 请求,代理与目标站建立 TCP 隧道,之后所有 HTTPS 加密数据在这条隧道里透明传输——代理看不到 URL、看不到 Body,只搬运加密字节。这一步常被理解错。它的实际含义是:HTTPS 流量上,HTTP 代理的”协议层精细控制”能力基本失效,退化成一个 TCP 隧道。要在 HTTPS 上做 URL 级控制,必须做中间人解密,而这在企业级合规采集场景里通常不被允许。 第二件是 Header 控制颗粒度。 HTTP 代理默认会注入 Via、X-Forwarded-For 等 Header,这些 Header 等于在响应里”自报家门”。一个治理到位的 HTTP 代理服务会把这些 Header 的处理规则做透——该剥的剥、该改的改、该保留的保留。这个颗粒度直接影响请求在目标站看来”像不像一个正常请求”,也直接影响访问环境隔离性。 第三件是后端 IP 池机制。 协议层做得再好,后端池本身是垃圾的也跑不动。我们日更 600 万+ 纯净 IP、全球 2000 万+ 纯净 IP 资源,覆盖 200+ 城市与 200+ 国家,底子是三大运营商节点;池里的 IP 在进池前都做过访问频率控制黑名单清洗——这就是我们把 IP 称作”纯净 IP”的原因。HTTP 代理的协议层能力是上半场,池机制是下半场,两者都要在线才有 99.9% 可用率与
2026-06-01 HTTP代理
Python代理IP可用性检测:多线程筛选与复检指南
代理IP可用性检测的关键,不是“能不能连上”这么简单,而是要确认它在你的爬虫流程里是否真的可用。一个可落地的判断,通常至少包含三层:请求是否成功返回、响应是否在可接受时间内完成、结果是否适合后续持续调用。用 Python 做这件事,常见做法就是用 `requests` 通过代理发起请求,再配合多线程...
Scrapy自动切换代理IP:下载器中间件配置与代理池实现指南
在 Scrapy 中实现自动切换代理 IP,最实用也最灵活的做法,通常就是自定义下载器中间件。原因很直接:代理的分配、失效剔除、重试接管,以及请求环境控制,基本都发生在请求发出前和响应返回后,而这正是下载器中间件最适合介入的位置。相比把逻辑分散写在爬虫里,中间件更容易维护,也更适合后续扩展成可持续运...
正规代理IP服务选型指南:合规、稳定性与HTTP接入能力
选择正规代理IP服务,核心不在“哪家名字更常见”,而在于是否合规、是否适合你的业务场景,以及能否长期稳定接入。尤其在企业使用 HTTP/HTTPS 代理服务时,先看资质与合规边界,再看访问稳定性、请求环境一致性和工程化调用能力,才更不容易在后续使用中出现中断、失效或业务风险。 选择正规代理I...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
扫码添加专属客服
扫码关注公众号