ip代理池(干货分享)

 2025-09-01 09:06:01  阅读 652  评论 0

摘要:因为爬虫被禁ip这样的反扒真的很凶,但自从建了一个代理ip池以后,反反扒就可以跟的上节奏。拥有一个代理池会很大程度上的帮助我们进行工作,经过一番研究,一个小的代理池就出现了。无私分享全套Python爬虫干货,如果你也想学习Python,@ 私信小编获取import json
import te

因为爬虫被禁ip这样的反扒真的很凶,但自从建了一个代理ip池以后,反反扒就可以跟的上节奏。拥有一个代理池会很大程度上的帮助我们进行工作,经过一番研究,一个小的代理池就出现了。无私分享全套Python爬虫干货,如果你也想学习Python,@ 私信小编获取

import json
import telnetlib
import requests

获取代理的json信息

干货分享,程序员构建代理ip池,轻松爬取数据库,不怕反爬虫。

很明显每一行是一个json数据,但整个页面你拿到的也不过是字符串而已,每一行末都换行,也就是说每一行末都有"\n",那么思路很清晰,用requests获得整个页面的text(字符串),然后用split('\n') 将每一行分割之后组成的列表,便利这个列表用json.loads()方法,将每一行的字符串转换为json对象,最后取值。

response = requests.get(proxy_url)
    proxies_list = response.text.split('\n')
    for proxy_str in proxies_list:
        proxy_json = json.loads(proxy_str)
        host = proxy_json['host']
        port = proxy_json['port']
        type = proxy_json['type']

验证代理ip是否有效

可以选择在requests请求一个特定的网页,参考相应参数判断是否(200)有效。也可以用telnetlib 库里的Telnet来判断是否成功。如果遇到不成功的ip,需要等待10秒。当然你也可以更改timeout的值,但如果你改的越小,你的ip池就越小。

import telnetlib

def verify(ip,port,type):
	proxies = {}
    try:
        telnet = telnetlib.Telnet(ip,port=port,timeout=10)
    except:
        print('unconnected')
    else:
        print('connected successfully')
        proxies['type'] = type
        proxies['host'] = ip
        proxies['port'] = port

建立代理ip池

建立代理ip池有两种思路,一种是动态的,一种是固定的。动态的是多线程操作:主线程爬取,另一个线程来获取代理ip。注意,代理ip的线程需要先运行,然后主线程爬取的时候才可以挂上proxy。在这里不介绍这一种,因为一遍爬取,一遍验证是非常慢的,如果遇到不成功的ip,需要等待10秒。可能你会误以为爬虫死掉。

介绍第二种,建立固定的,首先是你要对你的地址足够有信心,也可以频繁的更新ip池来保证有效性。好处是在调用的时候比较方便,而且该网站会不间断的连接失败,可能是访问人数太多,但里面的代理信息不是很容易荡掉,所以我更倾向于保存到json文件里。将代理ip的信息,type,host,port保存到字典里,再用json.dumps()方法将字典改为json数据,方便调用。

with open('verified_proxies.json','a+') as f:
        f.write(proxiesJson + '\n')
    print("已写入:%s" % proxies)
总代码:
import json
import telnetlib
import requests
import random

proxy_url = 'https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list'
# proxyList = []

def verify(ip,port,type):
    proxies = {}
    try:
        telnet = telnetlib.Telnet(ip,port=port,timeout=3)
    except:
        print('unconnected')
    else:
        #print('connected successfully')
        # proxyList.append((ip + ':' + str(port),type))
        proxies['type'] = type
        proxies['host'] = ip
        proxies['port'] = port
        proxiesJson = json.dumps(proxies)
        with open('verified_proxies.json','a+') as f:
            f.write(proxiesJson + '\n')
        print("已写入:%s" % proxies)

def getProxy(proxy_url):
    response = requests.get(proxy_url)
    proxies_list = response.text.split('\n')
    for proxy_str in proxies_list:
        proxy_json = json.loads(proxy_str)
        host = proxy_json['host']
        port = proxy_json['port']
        type = proxy_json['type']
        verify(host,port,type)


if __name__ == '__main__':
    getProxy(proxy_url)

运行效果,将严重成功的写入文件。

干货分享,程序员构建代理ip池,轻松爬取数据库,不怕反爬虫。

为了帮助大家更轻松的学好Python,我给大家分享一套Python学习资料,希望对正在学习的你有所帮助!

获取方式:关注并私信小编 “ 学习 ”,即可免费获取!

干货分享,程序员构建代理ip池,轻松爬取数据库,不怕反爬虫。

版权声明:我们致力于保护作者版权,注重分享,被刊用文章【ip代理池(干货分享)】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;

原文链接:https://www.yxiso.com/zhishi/2121170.html

标签:ip代理池

发表评论:

关于我们
院校搜的目标不仅是为用户提供数据和信息,更是成为每一位学子梦想实现的桥梁。我们相信,通过准确的信息与专业的指导,每一位学子都能找到属于自己的教育之路,迈向成功的未来。助力每一个梦想,实现更美好的未来!
联系方式
电话:
地址:广东省中山市
Email:beimuxi@protonmail.com

Copyright © 2022 院校搜 Inc. 保留所有权利。 Powered by BEIMUCMS 3.0.3

页面耗时0.0627秒, 内存占用1.91 MB, 访问数据库24次

陕ICP备14005772号-15