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正则表达式re模块详解
Jun 25 Python
Python多线程编程(四):使用Lock互斥锁
Apr 05 Python
Python配置文件解析模块ConfigParser使用实例
Apr 13 Python
Python基于smtplib实现异步发送邮件服务
May 28 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
Python中文件的读取和写入操作
Apr 27 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
《与孩子一起学编程》python自测题
May 27 Python
使用 Python 处理 JSON 格式的数据
Jul 22 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
python文件编写好后如何实践
Jul 07 Python
Python 处理日期时间的Arrow库使用
Aug 18 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禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
JavaScript手机振动API
2016/06/11 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
Vuex 入门教程
2018/01/10 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
Windows下安装python2.7及科学计算套装
2015/03/05 Python
Python单链表简单实现代码
2016/04/27 Python
Python常用知识点汇总
2016/05/08 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
python将回车作为输入内容的实例
2018/06/23 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Python对列表的操作知识点详解
2019/08/20 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
小橄榄树:Le Petit Olivier
2018/04/23 全球购物
农行实习自我鉴定
2013/09/22 职场文书
企业厂长岗位职责
2013/12/17 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
个人租房协议书(范本)
2014/10/14 职场文书
团员个人总结
2015/02/26 职场文书
办公室禁烟通知
2015/04/23 职场文书
导游词之神仙居景区
2019/11/15 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang