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使用matplotlib绘制折线图教程
Feb 08 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
Python TestCase中的断言方法介绍
May 02 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
Jul 01 Python
在Django中实现添加user到group并查看
Nov 18 Python
Python with标签使用方法解析
Jan 17 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
tensorflow常用函数API介绍
Apr 19 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 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计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
WAF的正确bypass
2017/01/05 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
全面了解js中的script标签
2016/07/04 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
angular2中使用第三方js库的实例
2018/02/26 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
2019/12/02 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
[01:13]这,就是刀塔
2014/07/16 DOTA
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
简单谈谈Python流程控制语句
2016/12/04 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
《分一分》教学反思
2014/04/13 职场文书
平安工地建设方案
2014/05/06 职场文书
单位综合评价意见
2015/06/05 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏