学习Python爬虫的同学,都需要自己建造一个代理IP池(免费的),下面给大家分享代理IP池如何建池。

本项目爬取的是代理商提供的免费IP。

项目爬取代理IP商列表:(自己练手增加代理商)

  1. 快代理
  2. 89免费代理
  3. 高可用全球免费代理IP库

项目环境

  • Python 3.9

  • selenium 4.1.3

  • chromedriver 100.0.4896.60 (需要适配本电脑chrome版本) 下载G

Git仓库

  • gitee  https://gitee.com/mz100/ip_poolding
  • github https://github.com/mz100/ip_pooling

爬取流程:

1、通过命令输入获取爬取网站的选择

main.py

在命令输入选项,获取选择爬取网站,如果全部网站爬取,用多线程的方式进行处理。

异常处理,用于输入有误时,重复执行 run() 方法。

def run():try:print('''请选择获取的ip提供商:1. 快代理2. 89免费代理 3. 高可用全球免费代理ip库4. 全部''')channel = input('请输入选项(数字):')if channel == '1':Kuaidaili().run()elif channel == '2':IpFree().run()elif channel == '3':JiangXianLi().run()elif channel == '4':# 多线程处理channels = [Kuaidaili().run,IpFree().run,JiangXianLi().run]# 创建线程threads = []for i in channels:threads.append(threading.Thread(target=i))# 启动线程for i in threads:i.start()# 等待线程结束for i in threads:i.join()else:raise Exception('输入错误!')except Exception as e:print('输入错误,请重新输入!')run()

2、爬虫主流程

spider_base.py 一般爬虫的处理流程分为三个步骤:

  1. 爬取数据,
  2. 整理清洗数据,
  3. 数据保存展示。

由于我们爬取的IP是公开,很多已经过期不能使用我们需要爬取的是当前可以使用的IP,故此需要进行IP的校验检查,我们就在数据清理后增加 “检查数据”

    # 爬取流程def run(self):# 爬取数据html = self.spider()# 整理数据data = self.pipeline(html)# 检查数据data = self.check_useful(data)# 保存数据self.save(data)

3、requests和selenium爬取类定义不同爬取方法

不同的网站,我们需要使用不同的爬取方式,非异步加载的网站,我们采用的是requests包进行爬取即可,异步或者反爬处理过的网站,我们使用selenium爬取。

spider_requests.py 

爬取需要注意编码问题,如果乱码,需要增加:req.encoding = req.apparent_encoding

    # 爬取数据def spider(self):req = requests.get(url=self.base_url, headers=Proxy().get_header(), timeout=5)# 编码处理req.encoding = req.apparent_encodingreturn req.text

spider_selenium.py

使用selenium,需要注意 chromedriver 和 chrome版本的问题。

注意:chrome_options.add_argument('--headless')  配置后不打开chrome窗口,建议打开进行调试。

    # 爬取数据def spider(self):chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')browser = webdriver.Chrome(options=chrome_options)browser.get(url=self.base_url)# 编码处理data = browser.page_sourcebrowser.quit()return data

4、不同代理商网站的爬取类

channels 目录下定义不同的爬取渠道

每一个爬取渠道的配置不一样的爬取地址和方法,如需要进行不同的数据清理,可以在该类重新定义。

# !/usr/bin/python
# -*- coding: utf-8 -*-
"""
@File    :  kuaidaili.py
@Time    :  2022/4/16 18:24
@Author  :  Mz100
@Desc    :  None
"""
import pandas as pdfrom libs.spider_selenium import Spiderclass Kuaidaili(Spider):def __init__(self):self.base_url = "https://www.kuaidaili.com/free/"self.source = 2# 数据整理def pipeline(self, html):tables = pd.read_html(html)table = tables[0]sources = []isps = []for i in table['位置']:sources.append(self.source)isps.append(i.split()[-1])# 创建 DataFramedf = pd.DataFrame()df['ip'] = table['IP']df['port'] = table['PORT']df['address'] = table['位置']df['isp'] = ispsdf['source'] = sourcesreturn df

 5、最后通过Sqlite保存IP数据

# 数据存储def save(self, df):conn = sqlite3.connect(Sqlite().get_db_file())c = conn.cursor()if df.values.all():for i in df.values:if str(i[1]).isdigit():try:sql = "INSERT INTO {5} (ip,port,address,isp,source) VALUES ('{0}', '{1}', '{2}', '{3}','{4}')" \.format(i[0], i[1], i[2], i[3], i[4], Sqlite().get_table())c.execute(sql)conn.commit()print('脚本:' + sql + '插入成功')except Exception as e:print('脚本:' + sql + '插入失败')print(e)conn.close()

至此,我们实现了 代理IP池的建池开发。

喜欢的点个赞 ❤ 吧!

每周一练:如何创建自己的Python爬虫代理IP池(免费IP)相关推荐

  1. python爬虫:多线程收集/验证IP从而搭建有效IP代理池

    文章目录 搭建代理IP池 (1)IP来源 (2)初步收集IP (3)可用性检验 (4)IP池存储展示 (5)单线程IP池完整实现 (6)多线程IP验证 搭建代理IP池 (1)IP来源 了解到代理IP及 ...

  2. Python 爬虫入门(二)—— IP代理使用 - 不剃头的一休哥 - 博客园

    Python 爬虫入门(二)-- IP代理使用 - 不剃头的一休哥 - 博客园 Python 爬虫入门(二)-- IP代理使用 - 不剃头的一休哥 - 博客园 posted on 2016-01-26 ...

  3. Python爬虫——代理和代理池

    文章目录 Python爬虫--代理和代理池 1.代理 2.代理池 Python爬虫--代理和代理池 1.代理 代理用处: 突破自身IP访问限制,访问国外资源 访问单位或公司内部资源 提高访问速度 隐藏 ...

  4. python免费教学视频400集-如何入门 Python 爬虫?400集免费教程视频带你从0-1全面掌握...

    学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量.数据结构.语法等,基础过的很快,基本上1~2周时间就能过完了,我当时是在这儿看的基础: ...

  5. Python爬虫方式抓取免费http代理IP

    我们新手在练手的时候,常常需要一些代理IP进行爬虫抓取,但是因为学习阶段,对IP质量要求不高,主要是弄懂原理,所以花钱购买爬虫代理IP就显得没必要(大款忽略),今天跟大家分享一下,如果使用爬虫抓取免费 ...

  6. python爬虫代理的使用_从零开始写Python爬虫 --- 2.4 爬虫实践:代理的爬取和验证...

    爬网站的时候,由于各种原因,ip被锁了,这个时候我们就需要通过代理来突破封锁.网上有很多代理网站,付费和免费的都有,这次我们就来写一个scrapy爬虫,爬一些免费的代理下来用. 目标分析: 本次爬取了 ...

  7. Python爬虫——使用线程池爬取同程旅行景点数据并做数据可视化

    大家好!我是霖hero 正所谓:有朋自远方来,不亦乐乎?有朋友来找我们玩,是一件很快乐的事情,那么我们要尽地主之谊,好好带朋友去玩耍!那么问题来了,什么时候去哪里玩最好呢,哪里玩的地方最多呢? 今天将 ...

  8. Python爬虫热点项目之实现代理IP池(IP proxy pool)

    代理池概述 代理池就是由多个稳定可用代理IP组成的池子.用来应对ip反爬,而网上的免费代理稳定可用的极少,更有甚者连收费的也不都是稳定可用. 开发环境: windous,python3,sublime ...

  9. python爬虫代理ip_Python爬虫如何获取代理ip及ip验证?

    如何获取大量的公开数据信息,这是我们互联网在竞争激烈的环境中的生存之道,不管在什么环境下都要学习和了解用户市场,客户需求,竞争对手,如何能获取到大量的数据信息,那么就需要用到网络爬虫. 在我们从事py ...

  10. python爬虫脚本ios_【苹果IP代理】 8大高效的Python爬虫框架,你用过几个?

    [苹果 IP 代理] 8 大高效的 Python 爬虫框架, 你用过几个? [苹果 IP 代理]大数据时代下,数据采集推动着数据分析, 数据分析推动发展. 但是在这个过程中会出现很多问题. 拿最简 单 ...

最新文章

  1. Mysql主从同步异常处理
  2. c++exe程序在别人电脑上双击无法打开_电脑换新系统的应用可以这样快速迁移
  3. 第三次冲刺阶段第五天
  4. 第三十章 elk(1) - 第一种架构(最简架构)
  5. Android中最简单的分享功能
  6. 金融零售业务大数据分析解决方案
  7. poj 3614(最大流)
  8. python 嵌入式 linux 产品 发布_基于嵌入式Linux进行Python应用开发
  9. arduino 舵机接线图_求用5个电位器分别控制舵机的arduino的原码和连线图
  10. 使用vue的sync修饰符进行子父组件的数据绑定
  11. Android 系统(158)---Android O、N 减少占用ROM空间或者加快安装速度
  12. 【dp】P1077 摆花
  13. 【软件工程】软件工程中应用的几种图辨析:系统流程图、数据流图、数据字典、实体联系图、状态转换图、层次方框图、Warnier图、IPO图、层次图、HIPO图、结构图、程序流程图、盒图、PAD图、判定表、
  14. BP神经网络分类实例(神经网络编程入门 )
  15. Knockout应用开发指南 第一章:入门
  16. elipse下载安装教程
  17. 好用的开源软件_推荐_良心软件
  18. H3C交换机端口镜像配置
  19. vbox win10 分辨率_告诉你win10系统设置屏幕分辨率的两种方法
  20. 在线latex 网址

热门文章

  1. 谷歌浏览器插件 - 为 Microsoft Bing 搜索引擎首页添加一个【保存背景图片】的按钮(版本 1)
  2. log4j2-rce-cve-2021-44228 漏洞复现
  3. c语言数字转化为英文版,(C语言编写的英语数字转化代码数字转化为用英语表达的数字.doc...
  4. 求会议安排的时间最大化(回溯法)
  5. 雪球网 json 获取
  6. GenericObjectPoolConfig属性
  7. 激光雷达定位-论文心得
  8. 影响网站跳出率的因素
  9. 美国LangeEylandt长岛
  10. java heap space默认值_java heap space