L2-016 愿天下有情人都是失散多年的兄妹

阿里云服务器CPU内存公网宽带磁盘存储选择方法共10步

  返回  

【爬虫之路永无止境】爬了那么多次,爬出了血泪经验,教你怎么在IP被封时也能继续爬

2021/7/20 20:32:55 浏览:

在爬虫时最怕被封IP,该怎么防止被封或在被封的情况下也能继续爬呢?硬货分享,教你怎么伪装自己的 IP 地址,别让对方轻易的就把你给封掉。
在这里插入图片描述

1.定义代理IP

其实,对于 Python 来说,使用代理访问很简单,就拿我们经常使用的 requests 库来说,使用代理 IP 如下

proxie = { 
        'http' : 'http://xx.xxx.xxx.xxx:xxxx',
        'http' : 'http://xxx.xx.xx.xxx:xxx',
        ....
    }  

使用代理

response = requests.get(url,proxies=proxies)

2.免费代理源

这样就能使用你定义的代理地址去访问网站了,但是代理地址哪里来呢?在网上有很多免费的代理IP,当然免费的话就有很多人都去使用,所以这些代理IP有时会不稳定,如果你要求高还有钱的话,可以去网上专门买付费的代理IP。

目前实现的采集免费代理网站有(排名不分先后, 下面仅是对其发布的免费代理情况)

代理名称地址
米扑代理https://proxy.mimvp.com/
66代理http://www.66ip.cn/
神鸡代理http://www.shenjidaili.com/
快代理https://www.kuaidaili.com/
云代理http://www.ip3366.net/
小幻代理https://ip.ihuan.me/
免费代理库https://ip.jiangxianli.com/
89代理https://www.89ip.cn/
西拉代理http://www.xiladaili.com/

付费代理IP:
在这里插入图片描述

3.自己做一个IP代理池

如果不想花钱呢?自己动手丰衣足食,可以搞一个IP代理池,主要就是通过 Python 程序去抓取网上大量免费的代理 IP,然后定时的去检测这些 IP可不可以用,那么下次你要使用代理 IP 的时候,你只需要去自己的 IP代理池里面拿就行。

推荐一个开源 IP代理池

https://github.com/Python3WebSpider/ProxyPool.git

使用方法:

1.首先使用 git clone 将源代码拉到你本地

git clone https://github.com/Python3WebSpider/ProxyPool.git

2.打开项目中的 setting.py

在这里可以配置相关信息,比如 Redis 的地址密码相关,(如果你之前没有使用过 redis 的话,可以到如下地址下载

https://github.com/MicrosoftArchive/redis/releases)

3.接着在你 clone 下来的文件目录中,安装相关所需的 Python 模块

pip3 install -r requirements.txt

4.开启你的 redis,redis 的默认端口就是 6379
在这里插入图片描述

5.运行 run.py

代理池开始运行

 * Running on http://0.0.0.0:5555/ (Press CTRL+C to quit)
开始抓取代理
获取器开始执行
Crawling http://www.66ip.cn/1.html
正在抓取 http://www.66ip.cn/1.html
抓取成功 http://www.66ip.cn/1.html 200
成功获取到代理 201.69.7.108:9000
成功获取到代理 111.67.97.58:36251
成功获取到代理 187.32.159.61:51936
成功获取到代理 60.13.42.154:9999
成功获取到代理 106.14.5.129:80
成功获取到代理 222.92.112.66:8080
成功获取到代理 125.26.99.84:60493

注意事项:
如果你在运行的时候出现这个错误

AttributeError: 'int' object has no attribute 'items'

更新一下 redis 版本

pip3 install redis==2.10.6

运行 run.py ,这时候在你的 redis 中就有爬取到的代理 IP了,项目跑起来之后,你就可以访问你的代理池了,比如随机获取一个代理 IP地址

http://localhost:5555/random

这样访问之后就会获取到一个代理 IP,在代码中获取代理也可以

import requests

PROXY_POOL_URL = 'http://localhost:5555/random'

def get_proxy():
    try:
        response = requests.get(PROXY_POOL_URL)
        if response.status_code == 200:
            return response.text
    except ConnectionError:
        return None

通过上面的方式,我们就能成功的在我们的代理池中获取代理 IP ,下次你的IP不小心封了,你就拿出你的代理IP,妥妥的替身。
在这里插入图片描述

点击获取😉

  • Python0基础学习(3套课程)
  • 300本书籍
  • 爬虫新手入门+B站全网动漫下载+selenium自动化案例
  • Python学习路线图
  • 面试大宝典
  • 20种游戏码源分享

Python解答,遇到问题不要慌,来这里~
基础学习资料,数据分析,爬虫等视频,来这里~
相亲相爱,互帮互助的技术交流,Q群:943192807,来这里~

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号