操作步骤

  1. 分析代理IP网站页面结构。
  2. 请求代理IP网站,解析并获取代理IP。
  3. 校验代理IP的可用性。
  4. 保存可用代理IP到文件中。

页面解析

  1. 分析https://www.xicidaili.com/nn页面,发现第二页和第三页的url分别为https://www.xicidaili.com/nn/2https://www.xicidaili.com/nn/3,即第n页需要访问https://www.xicidaili.com/nn/n
  2. 分析页面源码,发现IP列表位于id为ip_list的table中,第一个tr标签为表头,剩余的tr标签中则存在着IP信息。
  3. 分析tr标签,可以看到,第二个td标签为IP,第三个td标签为端口。

IP可用性验证

最简单的办法就是使用该代理IP访问其他网址,访问成功即为可用。这里访问http://httpbin.org/ip这个网址,它会返回发起请求的客户端IP,返回内容为

{"origin": ip
}

代码

  1. 需安装beautifulsoup4和requests模块,使用beautifulsoup4模块解析html页面,使用requests模块发送网络请求,将可用代理IP保存到proxies.txt文件中。
  2. https://github.com/Yinevg/PythonLearn/blob/master/get_proxy_ip/GetProxyIp.py
import json
import randomimport requests
from bs4 import BeautifulSoupbase_url = 'https://www.xicidaili.com/nn/{}'
checkUrl = 'http://httpbin.org/ip'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}
file_content = []
for i in range(1, 6):proxies = {}# 从已获取的代理IP中随机取一个来获取代理列表if len(file_content) > 0:random_proxy = random.sample(file_content, 1)[0]proxies['http'] = random_proxyproxies['https'] = random_proxy# 获取请求结果try:resp = requests.get(url=base_url.format(i), headers=headers, proxies=proxies)except Exception as e:# 使用代理请求失败,移除该代理if len(file_content) > 0:file_content.remove(proxies['http'])print('remove proxy %s: %s' % (proxies['http'], e))continue# 判断请求是否成功if resp.status_code != requests.codes.ok:print("get proxy list fail : %s" % resp.status_code)continue# 页面解析bsObj = BeautifulSoup(resp.text, 'html.parser')ipList = bsObj.find('table', {'id': 'ip_list'}).findAll('tr')# 去除表头for ip in ipList[1:]:tds = ip.select('td')proxy_ip = tds[1].get_text()proxy_port = tds[2].get_text()proxy = proxy_ip + ':' + proxy_portcheck_proxies = {'http': proxy,'https': proxy}try:print('check proxy %s' % proxy)checkResp = requests.get(url=checkUrl, headers=headers, proxies=check_proxies, timeout=1)# 检查是否为有效ipif proxy_ip in json.loads(checkResp.text)["origin"]:file_content.append(proxy)print('proxy %s is valid' % proxy)else:print('proxy %s is invalid' % proxy)except Exception as e:print('proxy %s is invalid : %s' % (proxy, e))
if len(file_content) > 0:with open("proxies.txt", "w", encoding="utf-8") as f:for line in file_content:f.write(line + '\n')
print('total: %s' % len(file_content))

Python3获取代理IP相关推荐

  1. Python获取代理IP地址

    代码: import requests from bs4 import BeautifulSoup# 获取代理ip TEST_URL = 'https://www.kuaidaili.com/free ...

  2. ProxyPool proxy-pool: java 基于springboot框架获取代理ip

    PROXY-POOL: java 基于springboot框架获取代理ip

  3. 使用python多线程获取代理IP(代理IP池,附源码)

    @[TOC]使用python多线程获取代理IP(代理IP池,附源码) 代理IP池 都说现在是大数据的时代,大多数的厂商会特别的注重自己家的数据安全问题,但同时,也有着许多的行业是需要大数据来做支撑的, ...

  4. proxies获取代理Ip方案

    获取代理Ip 防止自己的Ip被封禁,最好用一下代理IP 代理IP网站可以检测一下是否能用,从中随机获取 import requests from bs4 import BeautifulSoup im ...

  5. python 爬虫获取代理Ip

    要点:(环境Python3.5,额外库bs4) 1.从免费代理ip获取ip和端口号  http://www.xicidaili.com/nn/ 2.使用代理 import urllib.request ...

  6. 实战项目一:爬取西刺代理(获取代理IP)

    爬虫的学习就是与反扒措施.反扒系统做斗争的一个过程,而使用代理IP是我们重要的防反扒的重要措施,代理IP的来源有两种一是你花钱去购买商家会给你提供一个接口你直接调用就可以了,二是自己在网上爬取高效IP ...

  7. 获得代理ippython_Python学习笔记六(免费获取代理IP)

    1 importrequests2 importurllib.request3 from bs4 importBeautifulSoup4 importrandom,time,re5 importra ...

  8. python爬虫代理ip_Python爬虫如何获取代理ip及ip验证?

    如何获取大量的公开数据信息,这是我们互联网在竞争激烈的环境中的生存之道,不管在什么环境下都要学习和了解用户市场,客户需求,竞争对手,如何能获取到大量的数据信息,那么就需要用到网络爬虫. 在我们从事py ...

  9. Python爬虫获取代理ip及端口

    ''' 爬取代理ip 可以作为模块使用,在使用代理ip的时候直接调用该模块即可. ''' import re import urllib.requestdef ExtractIP(url='http: ...

最新文章

  1. vue中过渡动画(类名实现方式)
  2. 了解电商优惠券的一生,看完这篇就足够了!
  3. python restful服务部署_用python为mysql实现restful接口
  4. 封装caffe-windows-gpu(支持模型有多个输出)
  5. Angular应用的入口
  6. LeetCode 1759. 统计同构子字符串的数目
  7. 云漫圈 | 什么是微服务?
  8. python3.7.3安装教程和配置idle_python 3.7.0 安装配置方法图文教程
  9. centos7中,mysql连接报错:1130 - Host ‘118.111.111.111’ is not allowed to connect to this MariaDB server...
  10. System center virtual machine manager 2008 R2安装部署
  11. nginx安装lua/replace-filter-nginx-module
  12. eclipse设置Tomcat超级详细
  13. android9三星功能,三星开启安卓9.0测试:One UI Beta计划
  14. 原理图和PCB设计流程概述
  15. AES加解密 随机向量 密文一次一变 C#与PHP 程序加解密互通
  16. 对偶范数、霍尔德(Hölder)不等式、范数的共轭范数
  17. Python-懒人必备-语音小助手
  18. 100例(p019—p021)
  19. 程序员才看得明白的面试圣经
  20. 51单片机入门代码(上篇)

热门文章

  1. RGB颜色对照表#FFFFFF
  2. clj 将字符串 “a,b,c,d“ 转换为 {:A a1 :B b1 :C c1}
  3. tplink 智能dhcp服务器,TP-LINK路由器当DHCP服务器操作步骤
  4. 轻松解决邮政查询不了物流信息方法
  5. 你只看到别人表面的光鲜,却看不到他们背后的付出和努力
  6. 如何在unity3d中实现AR镜头全包裹和AR镜头不包裹效果
  7. idea启动Tomcat时控制台出现乱码的解决(亲测有效)
  8. 2021年安全员-A证(江苏省)考试平台及安全员-A证(江苏省)
  9. AOP(四)之After增强处理
  10. 数据为北太平洋柔鱼两年(1,2)的生物学采样数据,根据此数据完成 (1) 按年描述柔鱼的体重和胴长数据(如均值,方差,级差,分位数等),并进行绘 制(如直方图、箱线图,密度图等)。