首页 > 编程语言 >​Python爬虫IP代理池的建立和使用

​Python爬虫IP代理池的建立和使用

时间:2023-08-14 15:37:49浏览次数:40  
标签:res get Python IP 代理 爬虫 proxy ip

写在前面

建立Python爬虫IP代理池可以提高爬虫的稳定性和效率,可以有效避免IP被封锁或限制访问等问题。


下面是建立Python爬虫IP代理池的详细步骤和代码实现:

1. 获取代理IP

我们可以从一些代理IP网站上获取免费或付费的代理IP,或者自己租用代理IP服务。这里我们以站大爷代理为例,获取前10页的HTTP代理IP地址。

import requests

from scrapy.selector import Selector


def get_proxy_ips():

    proxy_ips = []

    for i in range(1, 11):

        url = 'https://www.zdaye.com/free/'.format(i)

        headers = {

            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

        res = requests.get(url, headers=headers)

        selector = Selector(text=res.text)

        trs = selector.css('#ip_list tr')

        for tr in trs[1:]:

            ip = tr.css('td:nth-child(2)::text').extract_first()

            port = tr.css('td:nth-child(3)::text').extract_first()

            proxy_ips.append('{}:{}'.format(ip, port))

    return proxy_ips


2. 检测代理IP的可用性

获取到代理IP后,需要对其进行可用性的检测,筛选出可用性较高的IP地址。这里我们测试以百度为目标网站检测HTTP代理IP地址的可用性,如果响应码为200,则表明该IP地址可用。


import requests


def check_proxy_ip(ip):

    url = 'http://www.baidu.com'

    headers = {

        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

    proxies = {'http': 'http://' + ip, 'https': 'https://' + ip}

    try:

        res = requests.get(url, headers=headers, proxies=proxies, timeout=10)

        if res.status_code == 200:

            return True

        else:

            return False

    except:

        return False

3. 将可用的代理IP存储到池中

将可用的代理IP存储到一个IP池中,根据需要可以设置IP池的容量和存储时间。这里我们将可用的IP地址存储到redis数据库中。


import redis


def save_proxy_ips():

    proxy_ips = get_proxy_ips()

    pool = redis.ConnectionPool(host='localhost', port=6379, db=0)

    r = redis.Redis(connection_pool=pool)

    for ip in proxy_ips:

        if check_proxy_ip(ip):

            r.sadd('proxy_ip_pool', ip)

4. 在爬虫程序中使用代理IP池

在爬虫程序中设置代理IP池,并在请求时随机选择一个可用的代理IP地址进行访问。这里我们使用requests库和random模块实现。


import requests

import redis

import random


def get_my_ip():

    url = 'http://httpbin.org/ip'

    res = requests.get(url)

    return res.json()['origin']


def get_random_proxy():

    pool = redis.ConnectionPool(host='localhost', port=6379, db=0)

    r = redis.Redis(connection_pool=pool)

    ip = r.srandmember('proxy_ip_pool')

    return ip.decode('utf-8')


# 随机选择代理IP进行访问

def crawl(url):

    proxy = {'http': 'http://'+get_random_proxy(), 'https': 'https://'+get_random_proxy()}

    headers = {

        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

    try:

        res = requests.get(url, headers=headers, proxies=proxy, timeout=10)

        if res.status_code == 200:

            return res.text

        else:

            return None

    except:

        return None


总结

需要注意的是,代理IP池的建立和使用需要注意IP的有效性和时效性,及时更新池中的IP地址,以保证代理IP的可用性。同时,在使用代理IP时需要遵守相关法律法规和网站的使用协议,不得用于非法活动。

标签:res,get,Python,IP,代理,爬虫,proxy,ip
From: https://blog.51cto.com/u_16022798/7077515

相关文章

  • 8.0 Python 使用进程与线程
    python进程与线程是并发编程的两种常见方式。进程是操作系统中的一个基本概念,表示程序在操作系统中的一次执行过程,拥有独立的地址空间、资源、优先级等属性。线程是进程中的一条执行路径,可以看做是轻量级的进程,与同一个进程中的其他线程共享相同的地址空间和资源。线程和进程都......
  • 6.0 Python 使用函数装饰器
    装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator),装饰器的功能非常强大,装饰器一般接受一个函数对象作为参数,以对其进行增强,相当于C++中的构造函数,与析构函数。装饰器本质上是一个python函数,它可以让其他函数......
  • 7.0 Python 面向对象编程
    python是一种面向对象的编程语言,面向对象编程(Object-OrientedProgramming,OOP)是一种编程思想,其核心概念是“对象”。对象是指一个具有特定属性和行为的实体,而面向对象编程就是通过对这些实体进行抽象、分类、封装和继承等操作,来实现程序的结构和逻辑。在python中,我们可以通过定义类......
  • javascript1
    执行环境-作用域-函数进阶-闭包1.回顾map的使用和与for/forEach的区别map的使用-只能用于数组,返回一个新数组,map内部必须returnforEach原数组上进行遍历(本质是for循环),要改变原数组第一层值,必须配合索引当遍历数组为数组对象用forEach可以直接改变第二层的值例1vararr=[1.......
  • HTTP代理IP在自媒体中的作用有哪些?
    随着自媒体业务的兴起和发展,为更多人提供了一个很好的平台。在自媒体业务中,HTTP代理IP的作用主要有以下几个方面:一、爬虫和数据采集:自媒体从不同的网站抓取数据时,为了避免被网站封禁IP,可以使用HTTP代理IP进行请求,通过不断切换IP地址来绕过网站的限制,实现抓取数据的稳定性。二、流量......
  • 9.0 Python 内置模块应用
    Python是一种高级、面向对象、通用的编程语言,由GuidovanRossum发明,于1991年首次发布。Python的设计哲学强调代码的可读性和简洁性,同时也非常适合于大型项目的开发。Python语言被广泛用于Web开发、科学计算、人工智能、自动化测试、游戏开发等各个领域,并且拥有丰富的第三方库......
  • 8.0 Python 使用进程与线程
    python进程与线程是并发编程的两种常见方式。进程是操作系统中的一个基本概念,表示程序在操作系统中的一次执行过程,拥有独立的地址空间、资源、优先级等属性。线程是进程中的一条执行路径,可以看做是轻量级的进程,与同一个进程中的其他线程共享相同的地址空间和资源。线程和进程都可......
  • 【校招VIP】测试计划之黑盒测试&白盒测试
    考点介绍:黑盒测试&白盒测试是大厂和三四线公司校招的必考点。黑盒是以结果说话,白盒往往需要理解实现逻辑。现在商业项目的接口测试往往以白盒为主,也就是需要测试同学自己观察和修改数据库的值进行用例的测试。但是无论采用哪种测试方法,毫无疑问都是为了找出缺陷,发现风险,需要对比......
  • 6.0 Python 使用函数装饰器
    装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator),装饰器的功能非常强大,装饰器一般接受一个函数对象作为参数,以对其进行增强,相当于C++中的构造函数,与析构函数。装饰器本质上是一个python函数,它可以让其他函......
  • 【校招VIP】java语言考点之Map1.7和1.8
    考点介绍:HashMap是大中小厂面试的高频考点,主要从底层结构,和线程安全等角度来进行考察,考察点比较集中,但是有一定难度分为初级和高级两种:初级一般集中在中小公司的map的key-value的可重复和可空问题;高级集中在1.7和1.8的变化,要理解变化的原因,以及并发安全性问题 一、考点题目1、......