快速带你构建专属IP代理池,让IP被封成为不可能!

许多python爬虫爱好者在爬虫爬取过程中或多或少都有被爬取网址封禁IP的时候,博主本人也是深受其害,为此才有了这篇博文的诞生,让更多爬虫爱好者不再受害。希望此教程对你们有所帮助,那我这篇博文也就有意义了。

一、网页查看

本次构造IP代理池,我们的目标是快代理

快代理首页,虽然有着免费代理,但都是HTTP类型的,而在开放代理中不仅有着HTTP还有HTTPS类型的免费代理在这里插入图片描述
在这里插入图片描述
打开控制台查看数据位置
在这里插入图片描述
可以发现IP代理数据不是动态加载的,这样就好办了,请看下面的代码分析
在这里插入图片描述
多页爬取,大家都是清华北大的下图应该看的懂吧。ο(=•ω<=)ρ⌒☆
在这里插入图片描述


二、完整代码及代码分析

import requests
from bs4 import BeautifulSoup
import time

#列表(最后的ip代理数据保存再列表中)
proxies_list = []

#爬取
def download(response):
	#引入全局变量
    global proxies_list
    
    #使用bs4的lxml解析
    data_list = BeautifulSoup(response.text, "lxml")
    
    #根据select选择器定位,可以参考图1
    tr_list = data_list.select("#freelist > table > tbody")
    tr_list = BeautifulSoup(str(tr_list), "lxml")
	
	#遍历得到里面的每个tr标签再解析取值
    for tr in tr_list.find_all("tr"):
    	#字典,用来存储ip代理数据
        proxies_dict = {}
        td = BeautifulSoup(str(tr), "lxml")
        
        #有的代理类型只有http,但有的既有http又有https,而且有https的一定支持http
        #所以以下类型如果只支持http就用http表示,两种都支持就用https表示
        try:
        	#根据","分割取https,如果有则取到,没有抛异常,就不分割即为http类型
            http_type = td.find(attrs={"data-title": "类型"}).text.split(",")[1].strip()
        except:
            http_type = td.find(attrs={"data-title": "类型"}).text
        #参考图2
        #根据自定义参数定位,取值
        ip = td.find(attrs={"data-title": "IP"}).text
        port = td.find(attrs={"data-title": "PORT"}).text
        # print(http_type, ip, port)
        #添加到字典
        proxies_dict[http_type] = ip + ":" + port
        #添加到列表
        proxies_list.append(proxies_dict)



#开始
if __name__ == "__main__":
	#进行多页爬取	
    for i in range(3):
        url = "https://www.kuaidaili.com/ops/proxylist/" + str(i+1)
        #发送get请求
        response = requests.get(url=url)
        download(response)
        
    print(proxies_list)
    #ip代理个数
    print(len(proxies_list))


三、图片辅助分析

图1
在这里插入图片描述

图2
在这里插入图片描述

图3


四、运行结果

在这里插入图片描述


博主会持续更新,有兴趣的小伙伴可以点赞、关注和收藏下哦,你们的支持就是我创作最大的动力!
更多Python爬虫有关文章
在这里插入图片描述

©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页