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局部赋值的规则
Mar 07 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
Python机器学习之K-Means聚类实现详解
Feb 22 Python
python去掉 unicode 字符串前面的u方法
Oct 21 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
Pycharm+Python+PyQt5使用详解
Sep 25 Python
python 使用while写猜年龄小游戏过程解析
Oct 07 Python
opencv python如何实现图像二值化
Feb 03 Python
python求解汉诺塔游戏
Jul 09 Python
python如何调用php文件中的函数详解
Dec 29 Python
如何使用Python实现一个简易的ORM模型
May 12 Python
Python OpenCV 彩色与灰度图像的转换实现
Jun 05 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制作静态网站的模板框架(四)
2006/10/09 PHP
php注销代码(session注销)
2012/05/31 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
PHP实现递归的三种方法
2020/07/04 PHP
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
Jquery中"$(document).ready(function(){ })"函数的使用详解
2013/12/30 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
JS常用算法实现代码
2016/11/14 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
AngularJS中scope的绑定策略实例分析
2017/10/30 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
python实现读取命令行参数的方法
2015/05/22 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
高中自我评价分享
2013/12/05 职场文书
幼儿园中班上学期评语
2014/04/18 职场文书
小学生演讲稿大全
2014/04/25 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书
golang为什么要统一错误处理
2022/04/03 Golang