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进阶教程之异常处理
Aug 30 Python
python实现ipsec开权限实例
Nov 11 Python
python生成随机mac地址的方法
Mar 16 Python
Python实例一个类背后发生了什么
Feb 09 Python
浅谈Python中的私有变量
Feb 28 Python
将python代码和注释分离的方法
Apr 21 Python
Python实现重建二叉树的三种方法详解
Jun 23 Python
pycharm在调试python时执行其他语句的方法
Nov 29 Python
Python Numpy 实现交换两行和两列的方法
Jun 26 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
python 的topk算法实例
Apr 02 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 xml文件操作代码(一)
2009/03/20 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
php常用的url处理函数总结
2014/11/19 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
PHP 中常量的知识整理
2017/04/14 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
在windows系统中实现python3安装lxml
2016/03/23 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
Python如何为图片添加水印
2016/11/25 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
人力资源专员自我评价怎么写
2013/09/19 职场文书
计算机专业毕业生自我鉴定
2014/01/16 职场文书
优秀企业获奖感言
2014/02/01 职场文书
2014年乡镇植树节活动方案
2014/02/28 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
Win10系统下配置Java环境变量
2021/06/13 Java/Android
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers