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基础教程之循环介绍
Aug 29 Python
Python中SOAP项目的介绍及其在web开发中的应用
Apr 14 Python
详解Django通用视图中的函数包装
Jul 21 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
Sep 21 Python
Django学习笔记之Class-Based-View
Feb 15 Python
Python实现将照片变成卡通图片的方法【基于opencv】
Jan 17 Python
对Python3使运行暂停的方法详解
Feb 18 Python
使用pandas的box_plot去除异常值
Dec 10 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 Python
OpenCV灰度化之后图片为绿色的解决
Dec 01 Python
20行代码教你用python给证件照换底色的方法示例
Feb 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生成扇形比例图实例
2013/11/06 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
php源码分析之DZX1.5加密解密函数authcode用法
2015/06/17 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
基于Jquery的简单&简陋Tabs插件代码
2010/02/09 Javascript
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
jquery结婚电子请柬特效源码分享
2015/08/21 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
jQuery事件绑定用法详解
2016/09/08 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
layui的select联动实现代码
2019/09/28 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
优秀教师主要事迹
2014/02/01 职场文书
机械工程师岗位职责
2014/06/16 职场文书
2014年文秘工作总结
2014/11/25 职场文书
出纳试用期自我评价
2015/03/10 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS