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创建关联数组(字典)的方法
May 04 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
使用Python对IP进行转换的一些操作技巧小结
Nov 09 Python
Python松散正则表达式用法分析
Apr 29 Python
python实现opencv+scoket网络实时图传
Mar 20 Python
python实现吃苹果小游戏
Mar 21 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
如何用python处理excel表格
Jun 09 Python
django序列化时使用外键的真实值操作
Jul 15 Python
Python 日期与时间转换的方法
Aug 01 Python
pymysql模块使用简介与示例
Nov 17 Python
python录音并调用百度语音识别接口的示例
Dec 01 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
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
jquery ready()的几种实现方法小结
2010/06/18 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
js轮播图无缝滚动效果
2017/06/17 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
Python中拆分字符串的操作方法
2019/07/23 Python
python与mysql数据库交互的实现
2020/01/06 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
早会主持词
2014/03/17 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
端午节寄语2015
2015/03/23 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
Tomcat starup.bat 脚本实现开机自启动
2022/04/20 Servers