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编写一个简单的FUSE文件系统的教程
Apr 02 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
python开发准备工作之配置虚拟环境(非常重要)
Feb 11 Python
使用django的objects.filter()方法匹配多个关键字的方法
Jul 18 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
Oct 27 Python
Python zip函数打包元素实例解析
Dec 11 Python
python 中值滤波,椒盐去噪,图片增强实例
Dec 18 Python
Python数据正态性检验实现过程
Apr 18 Python
Python基于pip实现离线打包过程详解
May 15 Python
python反编译教程之2048小游戏实例
Mar 03 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 防注入函数(格式化数据)
2011/08/08 PHP
php中require和require_once的区别说明
2014/02/27 PHP
初识PHP
2014/09/28 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
jquery里的正则表达式说明
2011/08/03 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
浅析Vue中method与computed的区别
2018/03/06 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
Python实现模拟时钟代码推荐
2015/11/08 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
eclipse创建python项目步骤详解
2019/05/10 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
计算机应用与科学个人的自我评价
2013/11/15 职场文书
出国留学介绍信
2014/01/13 职场文书
销售会计岗位职责
2014/03/15 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
结婚仪式主持词
2015/06/29 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
关于企业的执行力标语大全
2020/01/06 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL