Python爬虫初学者写的IP代理池程序,抓取的免费代理IP质量差,有什么好的建议?

系统功能:
( 1 )自动爬取互联网上公开的免费代理 IP (目前已支持西刺代理、快代理、IP181 )
( 2 )周期性验证代理 IP 有效性
( 3 )提供 http 接口获取可用 IP

系统逻辑架构:
https://raw.githubusercontent.com/lsdir/proxypool/master/image/architecture.png

GitHub:
https://github.com/lsdir/proxypool

各位大佬:
抓取的 IP 质量好差,有没有什么好的替换方案?
或者程序方面的其他建议都可以交流。


Python爬虫初学者写的IP代理池程序,抓取的免费代理IP质量差,有什么好的建议?

24 回复

免费代理质量差是普遍问题,核心在于筛选和验证。直接给你个能跑的核心模块,自己补上数据库和调度逻辑就行。

import requests
import concurrent.futures
from typing import List, Dict
import time

class ProxyValidator:
    def __init__(self, test_url='http://httpbin.org/ip', timeout=5):
        self.test_url = test_url
        self.timeout = timeout
        self.headers = {'User-Agent': 'Mozilla/5.0'}

    def validate_single(self, proxy: Dict) -> Dict:
        """验证单个代理"""
        proxies = {
            'http': f"http://{proxy['ip']}:{proxy['port']}",
            'https': f"http://{proxy['ip']}:{proxy['port']}"
        }
        
        try:
            start = time.time()
            resp = requests.get(self.test_url, 
                              proxies=proxies, 
                              timeout=self.timeout,
                              headers=self.headers)
            latency = (time.time() - start) * 1000  # 毫秒
            
            if resp.status_code == 200:
                # 检查返回的IP是否确实是代理IP
                returned_ip = resp.json().get('origin', '')
                if proxy['ip'] in returned_ip:
                    proxy['latency'] = round(latency, 2)
                    proxy['valid'] = True
                    return proxy
        except:
            pass
        
        proxy['valid'] = False
        return proxy

    def batch_validate(self, proxy_list: List[Dict], max_workers=20) -> List[Dict]:
        """批量验证代理"""
        valid_proxies = []
        with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
            futures = [executor.submit(self.validate_single, proxy) for proxy in proxy_list]
            for future in concurrent.futures.as_completed(futures):
                result = future.result()
                if result['valid']:
                    valid_proxies.append(result)
        
        # 按延迟排序
        return sorted(valid_proxies, key=lambda x: x['latency'])

# 使用示例
if __name__ == '__main__':
    validator = ProxyValidator()
    
    # 假设从某网站爬取的原始代理列表
    raw_proxies = [
        {'ip': '123.123.123.123', 'port': '8080', 'type': 'http'},
        {'ip': '124.124.124.124', 'port': '8888', 'type': 'https'},
        # ... 更多代理
    ]
    
    # 批量验证
    good_proxies = validator.batch_validate(raw_proxies)
    
    print(f"原始代理数: {len(raw_proxies)}")
    print(f"有效代理数: {len(good_proxies)}")
    print("最快的前5个代理:")
    for p in good_proxies[:5]:
        print(f"  {p['ip']}:{p['port']} - {p['latency']}ms")

关键点:

  1. 用并发验证提高效率,免费代理失效快,必须实时验证
  2. 不仅要看连通性,还要验证返回的IP确实是代理IP(防透明代理)
  3. 记录延迟,按速度排序,只用最快的几个
  4. 验证网址别用目标网站,用httpbin这类测试站,避免被封

免费代理就这德行,十个里能有一个能用就不错了。真要稳定还是得考虑付费代理或者拨号VPS。

建议:专注质量而非数量,维护个二三十个高速代理比几百个垃圾代理管用。

免费的通常都没什么质量,像那些大量用这种代理刷人气之类的都是买的,一个 IP 可能几块钱甚至更低。

买高匿的要靠谱些吧

买,你可以去阿布云之类的,一块钱买一个小时先试一下

对验证完成的 IP 根据端口、所在地进行分类,然后配置扫描

鲲鹏代理

就算是收费的很多也是垃圾 拨号 vps 最好用

重启路由器? 23333

质量差中调最好的来用

yes 程序自动判断 自动重启

代理用多了居然忘了有这种操作,应该是重新拨号比较有效率,重启路由太慢了

VerifyProxy 可以做成针对目标检测,代理对于不同站点的可用性可能还不一样(比如已经被 Ban ),尤其这种开放的。

可以重新拨号

买吧,很多收费的自己的服务器揽了家庭宽带的 ip,不是扫的

又得秀一波我写的了。最近爬虫用的很 high ~
https://proxy.coderbusy.com/

首先有免费的 api,但是免费代理的时效性和连通率都差太多了,最优的是拨号 vps

感谢各位 V 友回复<br>
总结起来 2 种替代方案:<br>
1、花钱买<br>
2、自己拉网线自动拨号重启切换 IP<br>
无奈以后爬虫要部署在阿里云之类的云主机的,拨号方案不可取。花钱买代理,系统太依赖别人,IP 质量也参差不齐,嘤嘤嘤。


我也初学 PYTHON
我用的你的代码试着添加一个 Plugin
网址如: https://proxy.coderbusy.com/zh-cn/classical/anonymous-type/transparent/p2.aspx
但报错了。
Log 如下:



2017-12-26 13:26:49,535 connectionpool.py[line:805] INFO Starting new HTTPS connection (1): proxy.coderbusy.com
2017-12-26 13:26:49,541 getproxy.py[line:71] ERROR request error, spider plugin: 码农, url: https://proxy.coderbusy.com/zh-cn/classical/anonymous-type/transparent/p9.aspx/, error: maximum recursion depth exceeded



求解答。
谢谢!!!

为啥不用 tor ?

/t/424630

我们有提供代理 ip 服务。最近有几位 v 友在使用,反馈还不错。

回到顶部