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 14 Python
python网络编程学习笔记(10):webpy框架
Jun 09 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
Python存取XML的常见方法实例分析
Mar 21 Python
Django 导出 Excel 代码的实例详解
Aug 11 Python
详解python基础之while循环及if判断
Aug 24 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
python+pygame实现坦克大战
Sep 10 Python
python如何使用腾讯云发送短信
Sep 17 Python
python 模拟登陆github的示例
Dec 04 Python
python如何为list实现find方法
May 30 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 删除无限级目录与文件代码共享
2008/11/22 PHP
php使用PDO方法详解
2014/12/27 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
thinkphp5使用无限极分类
2019/02/18 PHP
asp.net和php的区别点总结
2019/10/10 PHP
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
Python中zip()函数用法实例教程
2014/07/31 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
Python制作简单的网页爬虫
2015/11/22 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
python实现二叉查找树实例代码
2018/02/08 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
2020/06/02 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
C#面试问题
2016/07/29 面试题
英语专业学生个人求职信范文
2014/01/06 职场文书
留守儿童工作方案
2014/06/02 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
2014年政教处工作总结
2014/12/20 职场文书
五年级学生期末评语
2014/12/26 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android