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使用Flask框架获取当前查询参数的方法
Mar 21 Python
Python选课系统开发程序
Sep 02 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
Oct 20 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
Python closure闭包解释及其注意点详解
Aug 28 Python
利用Python小工具实现3秒钟将视频转换为音频
Oct 29 Python
Python常用模块logging——日志输出功能(示例代码)
Nov 20 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
Feb 23 Python
Pyspark读取parquet数据过程解析
Mar 27 Python
python Django 反向访问器的外键冲突解决
May 20 Python
Python3实现建造者模式的示例代码
Jun 28 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
php实现简单加入购物车功能
2017/03/07 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
Python 面向对象 成员的访问约束
2008/12/23 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Python聊天室实例程序分享
2016/01/05 Python
Python selenium文件上传方法汇总
2020/11/19 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
Python向excel中写入数据的方法
2019/05/05 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
资产评估专业学生的自我鉴定
2013/11/14 职场文书
简历自我评价怎么写好呢?
2014/01/04 职场文书
大学军训感言200字
2014/02/26 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
庆元旦主持词
2015/07/06 职场文书