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中3种内建数据结构:列表、元组和字典
Nov 30 Python
Python的Flask框架应用调用Redis队列数据的方法
Jun 06 Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 Python
python基础教程项目四之新闻聚合
Apr 02 Python
python 批量添加的button 使用同一点击事件的方法
Jul 17 Python
numpy中的meshgrid函数的使用
Jul 31 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
解决pytorch-yolov3 train 报错的问题
Feb 18 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
Feb 21 Python
 分享一个Python 遇到数据库超好用的模块
Apr 06 Python
讲解Python实例练习逆序输出字符串
May 06 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/03/23 PHP
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
jQuery each()小议
2010/03/18 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
javascript基本数据类型和转换
2017/03/17 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
python if not in 多条件判断代码
2016/09/21 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
机电一体化专业推荐信
2013/12/03 职场文书
护士自我评价范文
2014/01/25 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
安卓程序员求职信
2014/02/28 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
个人委托书怎么写
2014/09/17 职场文书
教师学期个人总结
2015/02/11 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技