Python爬取免费代理IP并验证有效性示例

认真发呆
认真发呆
发布时间:2026-10-14| 6人浏览过
原创

本文介绍使用Python爬取免费代理IP网站数据并生成JSON文件的方法。通过lxml模块提取IP和端口,利用requests库向百度发起请求以验证代理可用性,并将有效IP及耗时写入文件。代码包含分页抓取、延时处理及异常捕获,旨在为小型爬虫项目提供低成本的动态IP解决方案。

在进行大规模数据爬取时,IP被封禁是常见挑战。尽管可以通过设置请求间隔来降低被检测的风险,但高频访问仍可能导致IP被封。为此,使用动态IP隐藏真实地址成为必要手段。对于商业项目,建议直接调用平台提供的动态IP API服务;而对于学习或小规模测试项目,可以参考本文介绍的自行构建代理池的方法。

简述

本示例演示如何编写一个简单的Python爬虫,从免费IP网站抓取IP信息并保存为JSON文档,以便在其他爬取项目中调用。为了保证IP的有效性,建议采用“现爬现用”的策略,即在爬取其他目标网站时,实时从生成的JSON文件中提取IP,并在验证阶段筛选出响应时间较短且可用的IP地址进行存储。

实现

本方案以https://www.xicidaili.com/nn/作为数据源,通过尝试访问http://www.baidu.com/来验证IP的有效性。数据提取环节选用lxml模块,当然也可以使用re模块进行正则匹配,此处仅演示lxml的用法。在访问数据源前,需通过Fiddler等工具监听浏览器流量,获取正确的User-Agent头信息以模拟正常访问。例如,使用Proxy SwitchyOmega插件配合Fiddler,从监听数据中提取User-Agent并复制作为请求头。

引入模块


import requests
from lxml import etree
import time
import json

获取所有数据


def get_all_proxy(page):
  url = 'https://www.xicidaili.com/nn/%s'%page
  headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
  }
  response = requests.get(url, headers=headers)
  html_ele = etree.HTML(response.text)
  ip_eles = html_ele.xpath('//table[@id="ip_list"]/tr/td[2]/text()')
  port_ele = html_ele.xpath('//table[@id="ip_list"]/tr/td[3]/text()')
  print(ip_eles)
  proxy_list = []
  for i in range(0,len(ip_eles)):
    check_all_proxy(ip_eles[i],port_ele[i])
  return proxy_list

对数据进行筛选:


def check_all_proxy(host,port):
  type = 'http'
  proxies = {}
  proxy_str = "%s://@%s:%s" % (type, host, port)
  valid_proxy_list = []
  url = 'http://www.baidu.com/'
  proxy_dict = {
      'http': proxy_str,
      'https': proxy_str
    }
  try:
      start_time = time.time()
      response = requests.get(url, proxies=proxy_dict, timeout=5)
      if response.status_code == 200:
        end_time = time.time()
        print('代理可用:' + proxy_str)
        print('耗时:' + str(end_time - start_time))
        proxies['type'] = type
        proxies['host'] = host
        proxies['port'] = port
        proxiesJson = json.dumps(proxies)
        with open('verified_y.json', 'a+') as f:
          f.write(proxiesJson + '\n')
        print("已写入:%s" % proxy_str)
        valid_proxy_list.append(proxy_str)
      else:
        print('代理超时')
  except:
      print('代理不可用--------------->'+proxy_str)

运行程序:


if __name__ == '__main__':
  for i in range(1,11): #选取前十页数据使用
    proxy_list = get_all_proxy(i)
    time.sleep(20)
    print(valid_proxy_list)

生成的json文件:

以上即为Python爬取代理IP的完整示例。如需了解更多相关技术细节,请持续关注本站发布的其他Python爬虫教程。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。