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 20 Python
Python读写文件方法总结
Jun 09 Python
python爬取个性签名的方法
Jun 17 Python
Flask之flask-session的具体使用
Jul 26 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
感知器基础原理及python实现过程详解
Sep 30 Python
关于pandas的离散化,面元划分详解
Nov 22 Python
python实现宿舍管理系统
Nov 22 Python
python3 xpath和requests应用详解
Mar 06 Python
如何在mac下配置python虚拟环境
Jul 06 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
在终端启动Python时报错的解决方案
Nov 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
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
php异常处理使用示例
2014/02/25 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
一个可以显示阴历的JS代码
2007/03/05 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
创建Django项目图文实例详解
2019/06/06 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
工程技术员岗位职责
2014/03/02 职场文书
院系推荐意见
2015/06/05 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书