python爬取代理ip的示例


Posted in Python onDecember 18, 2020

要写爬虫爬取大量的数据,就会面临ip被封的问题,虽然可以通过设置延时的方法来延缓对网站的访问,但是一旦访问次数过多仍然会面临ip被封的风险,这时我们就需要用到动态的ip地址来隐藏真实的ip信息,如果做爬虫项目,建议选取一些平台提供的动态ip服务,引用api即可。目前国内有很多提供动态ip的平台,普遍价格不菲,而对于只想跑个小项目用来学习的话可以参考下本篇文章。

简述

本篇使用简单的爬虫程序来爬取免费ip网站的ip信息并生成json文档,存储可用的ip地址,写其它爬取项目的时候可以从生成的json文档中提取ip地址使用,为了确保使用的ip地址的有效性,建议对json文档中的ip现爬现用,并且在爬取时对ip有效性的时间进行筛选,只爬取时长较长、可用的ip地址存储。

实现

使用平台https://www.xicidaili.com/nn/来作为数据源,通过对http://www.baidu.com/的相应来判断ip的可使用性。引用lxml模块来对网页数据进行提取,当然也可以使用re模块来进行匹配提取,这里只使用lxml模块对数据进行提取。
访问https://www.xicidaili.com/nn/数据源,并且启动Fiddler对浏览器数据进行监听,我这里浏览器采用的是Proxy SwitchyOmega插件来配合Fiddler进行使用,在Fiddler找到/nn/*数据查看User-Agent信息并复制下来作为我们访问的头文件。如图:

python爬取代理ip的示例

引入模块

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爬取代理ip的示例的详细内容,更多关于python爬取代理ip的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python正则分组的应用
Nov 10 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
python如何修改装饰器中参数
Mar 20 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
python滑块验证码的破解实现
Nov 10 Python
Python如何优雅获取本机IP方法
Nov 10 Python
Python基于当前时间批量创建文件
May 07 Python
python使用numpy中的size()函数实例用法详解
Jan 29 Python
用Python 执行cmd命令
Dec 18 #Python
Django用内置方法实现简单搜索功能的方法
Dec 18 #Python
Django解决frame拒绝问题的方法
Dec 18 #Python
Django自带的用户验证系统实现
Dec 18 #Python
Django模板报TemplateDoesNotExist异常(亲测可行)
Dec 18 #Python
python 爬虫爬取京东ps4售卖情况
Dec 18 #Python
python实现视频压缩功能
Dec 18 #Python
You might like
PHP导入Excel到MySQL的方法
2011/04/23 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
深入密码加salt原理的分析
2013/06/06 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
Node.js的特点详解
2017/02/03 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python中多线程thread与threading的实现方法
2014/08/18 Python
python与php实现分割文件代码
2017/03/06 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
python中pop()函数的语法与实例
2020/12/01 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
美国最大的在线生存商店:Survival Frog
2020/12/13 全球购物
简历自我评价怎么写呢?
2014/01/06 职场文书
班主任寄语大全
2014/04/04 职场文书
投资合作协议书范本
2014/04/17 职场文书
学校创先争优活动总结
2014/08/28 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
利用Python实现模拟登录知乎
2022/05/25 Python