前言

在我们平时使用爬虫程序采集数据时,往往会遇到,因采集速度过快导致的自己网络ip被目标网站封禁,这种封禁有时候是封几分钟,有时候是封一天,封的时间不等,但是这样会导致我们局域网内其他人也无法访问目标网站,最大的问题是我们无法进行数据采集。为了保证正常采集数据且本地ip不被封禁,引入代理ip。

代理ip

代理ip有很多种类型,这里我们爬虫程序一般使用的是http或https的代理ip。
爬虫使用的话最好用高匿代理

高匿名代理不改变客户机的请求,这样在服务器看来就像有个真正的客户浏览器在访问它,这时客户的真实IP是隐藏的,服务器端不会认为我们使用了代理。

requests库使用代理ip

# 准备好的代理ip
proxy = "127.0.0.1:8000"
proxies = {"https": "https://{0}".format(proxy),"http": "http://{0}".format(proxy),}
res = requests.get(url, proxies=proxies)

以上代码片段是最简单的requests库实现代理ip执行get请求

线上爬虫使用代理ip方案

目前爬虫使用代理的方法很多,这里我简单说说我在线上环境使用代理的心得。
首先,我自己维护了一个代理ip池,这个ip池是放在redis中的,也就是说我的所有可使用的代理ip是放在redis中,使用redis的set数据结构,

image.png

当然了,这里列出的ip都是可使用的,因为在放入redis之前我会使用特定的程序去检测代理ip的可用性。
代理ip的来源这里我要说一下,最好是越多越好,分好类,付费的,免费的,拨号的,全部拿来用,使用的时候随机从redis中取一个出来用。代理ip的选择大家自行查找,或者需要也可给我留言。

scrapy使用代理ip

class RandomProxyMiddleware(object):def __init__(self):settings = get_project_settings()self.PROXY_REDIS_HOST = settings.get('PROXY_REDIS_HOST')self.PROXY_REDIS_PORT = settings.get('PROXY_REDIS_PORT')self.PROXY_REDIS_PARAMS = settings.get('PROXY_REDIS_PARAMS')self.PROXY_REDIS_KEY = settings.get('PROXY_REDIS_KEY')self.pool = redis.ConnectionPool(host=self.PROXY_REDIS_HOST,port=self.PROXY_REDIS_PORT,db=self.PROXY_REDIS_PARAMS['db'],password=self.PROXY_REDIS_PARAMS['password'])self.conn = redis.StrictRedis(connection_pool=self.pool)def process_request(self, request, spider):proxy = self.conn.srandmember(self.PROXY_REDIS_KEY)proxy = proxy.decode('utf-8')proxy = json.loads(proxy)ip = proxy['proxy']request.meta['proxy'] = "https://%s" % ip

上图代码片段自定义一个代理中间件RandomProxyMiddleware,在scrapyprocess_request(self, request, spider)这个方法中使用redis的操作随机获取一个代理出来,加到request.meta['proxy']中,便完成了代理中间件的编写。随后把RandomProxyMiddleware加到setting文件中,

DOWNLOADER_MIDDLEWARES = {'crawl_spider.middlewares.RandomProxyMiddleware': 400,
}

便可完成scrapy增加代理的需求。

代理软件的提取

怎样python爬虫更换ip地址爬取网站相关推荐

  1. python爬虫第二弹-多线程爬取网站歌曲

    python爬虫第二弹-多线程爬取网站歌曲 一.简介 二.使用的环境 三.网页解析 1.获取网页的最大页数 2.获取每一页的url形式 3.获取每首歌曲的相关信息 4.获取下载的链接 四.代码实现 一 ...

  2. python爬虫实战二:爬取网站表情包

    还在担心找不到适合的表情包怼人吗?还在为自己找不到搞笑的表情包而烦恼吗?教你用python快速爬取网站表情包! 网站链接: https://fabiaoqing.com/biaoqing/lists/ ...

  3. Php使用selenium爬虫,selenium,python爬虫_使用selenium爬取网站时输出结果不正确,selenium,python爬虫 - phpStudy...

    使用selenium爬取网站时输出结果不正确 网站链接:http://www.ncbi.nlm.nih.gov/pubmed?term=(%222013%22%5BDate%20-%20Publica ...

  4. 《python爬虫练习2》爬取网站表情包

    获取网站表情包 运行环境: #环境:win10 import requests #发送请求 from lxml import etree #获取html主页树状代码 import os #创建本地文件 ...

  5. python爬虫如何实现每天爬取微信公众号的推送文章

    python爬虫如何实现每天爬取微信公众号的推送文章 上上篇文章爬虫如何爬取微信公众号文章 上篇文章python爬虫如何爬取微信公众号文章(二) 上面的文章分别介绍了如何批量获取公众号的历史文章url ...

  6. python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片

    Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...

  7. 《python爬虫实战》:爬取贴吧上的帖子

    <python爬虫实战>:爬取贴吧上的帖子 经过前面两篇例子的练习,自己也对爬虫有了一定的经验. 由于目前还没有利用BeautifulSoup库,因此关于爬虫的难点还是正则表达式的书写. ...

  8. Python 爬虫 中国行政区划信息爬取 (初学者)

    Python 爬虫 中国行政区划信息爬取 (初学者) 背景 环境准备 代码片段 1.定义地址信息对象 2.地址解析对象 2.1 获取web信息 2.2 web信息解析 2.3 区划信息提取 2.4 省 ...

  9. python爬虫实例之——多线程爬取小说

    之前写过一篇爬取小说的博客,但是单线程爬取速度太慢了,之前爬取一部小说花了700多秒,1秒两章的速度有点让人难以接受. 所以弄了个多线程的爬虫. 这次的思路和之前的不一样,之前是一章一章的爬,每爬一章 ...

  10. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

最新文章

  1. Java 设计模式 之 中介者模式(Mediator)
  2. 华为交换机忘了密码如何恢复
  3. TCP/IP协议之网络链接的背后故事
  4. ubuntu linux本地源,搭建Ubuntu 12.04 本地源
  5. hbase操作,创建命名空间,创建hbase表,添加数据,删除数据,通过RowKey获取数据,扫描数据,获取所有的表,获取ColumnFamily,删除表,获取hbase命名空间
  6. ubuntu docker报错
  7. 是否,是否,总是富肥穷瘦?(文末上周投票公布)
  8. python orderdict_Python OrderedDict字典排序方法详解
  9. 友善之臂Mini2440NORflash bootloader烧写详述---亲测可用
  10. 学习数据库的概念,作用
  11. 【AC.HASH】OpenHarmony啃论文俱乐部——哈希技术:综述和分类(译)
  12. (附源码)mysql+ssm学生选课系统 毕业设计 170920
  13. [CF1284G]Seollal
  14. SEO并不难学,我是如何学习好SEO的
  15. NOJ 2015年陕西省程序设计竞赛网络预赛(正式赛)(小女警的异世界之战-前序中序求后序)
  16. 红绿灯+读秒——html+CSS+JavaScript实现
  17. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(七)Ubuntu开发环境配置
  18. 医疗项目 开源_开源医疗IT的未来
  19. 【任务栏输入法图标不见了怎么办】
  20. 郁闷的打包和诺基亚模拟器

热门文章

  1. 【文档/键值数据库】文档数据库和键值数据库有什么区别
  2. 股票python量化交易015-计算累积收益率
  3. java生成树型思维导图,Android树形控件绘制方法
  4. C# doevents
  5. wps小写金额转大写快捷键_日记坊 - excel小写金额快速转换大写的几个小技巧
  6. 加密音乐文件MGG/NCM转MP3
  7. 赚了20亿美元GandCrab勒索病毒家族的故事
  8. MCU通过UART实现OTA在线升级流程
  9. iOS面试题:Socket原理
  10. 软件系统概要设计的三大要素