首页 > 编程语言 >爬虫爬取免费代理ip(附源码)

爬虫爬取免费代理ip(附源码)

时间:2024-07-25 16:58:46浏览次数:10  
标签:use ip list response 爬取 源码 proxies page

在爬取某些网站的时候我们有可能遇到ip反爬措施,通常可以使用代理ip的方法应对,本次我们要爬取的是国内某知名的代理ip网站,并挑选出其中响应速度符合我们要求的IP。
在这里插入图片描述

爬取代码如下:

def get_ip(last):
    proxies_list = []                   # ip池
    for page in range(1, last + 1):         # last为爬取的页数
        time.sleep(1)
        print(f'============正在爬取第{page}页数据=============')
        url = f'https://www.kuaidaili.com/free/inha/{page}/'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
        }`在这里插入代码片`

        response = requests.get(url, headers=headers)
        response.encoding = response.apparent_encoding
        page_text = response.text

        # 正则匹配
        match = re.search(r'const fpsList = (\[.*?\]);', page_text).group()[16:-1]
        ip_list = json.loads(match)

        for ip in ip_list:
            ip_num = ip['ip']
            ip_port = ip['port']

            ip_proxy = ip_num + ':' + ip_port

            # 区分http和https,此处爬取的全为http
            proxy_dict = {
                'http': 'http://' + ip_proxy
            }
            proxies_list.append(proxy_dict)  # 加入ip池

    return proxies_list

检测ip是否可用:

def check_ip(proxies_list):
    time.sleep(1)
    can_use = []            # 可用ip池

    for ip in proxies_list:
        try:
            response = requests.get(url='https://www.baidu.com', proxies=ip, timeout=0.1)
            if response.status_code == 200:             # 可以访问则加入ip池
                can_use.append(ip)
        except:
            # print('当前代理:', ip, '请求超时,检验不合格')
            pass

    return can_use

以下附完整代码:

import json
import requests
import time
import re

# 测试ip是否可用

def check_ip(proxies_list):
    time.sleep(1)
    can_use = []            # 可用ip池

    for ip in proxies_list:
        try:
            response = requests.get(url='https://www.baidu.com', proxies=ip, timeout=0.1)
            if response.status_code == 200:             # 可以访问则加入ip池
                can_use.append(ip)
        except:
            # print('当前代理:', ip, '请求超时,检验不合格')
            pass

    return can_use

# 获取ip
def get_ip(last):
    proxies_list = []                   # ip池
    for page in range(1, last + 1):         # last为爬取的页数
        time.sleep(1)
        print(f'============正在爬取第{page}页数据=============')
        url = f'https://www.kuaidaili.com/free/inha/{page}/'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
        }

        response = requests.get(url, headers=headers)
        response.encoding = response.apparent_encoding
        page_text = response.text

        # 正则匹配
        match = re.search(r'const fpsList = (\[.*?\]);', page_text).group()[16:-1]
        ip_list = json.loads(match)

        for ip in ip_list:
            ip_num = ip['ip']
            ip_port = ip['port']

            ip_proxy = ip_num + ':' + ip_port

            # 区分http和https,爬取的全为http
            proxy_dict = {
                'http': 'http://' + ip_proxy
            }
            proxies_list.append(proxy_dict)  # 加入ip池

    return proxies_list


def Get_ip(page):
    proxies_list = get_ip(page)  # 爬6页ip
    can_use = check_ip(proxies_list)  # 获得可用ip
    print(can_use)
    return can_use

if __name__ == '__main__':
    print('============正在开始爬取============')
    proxies_list = get_ip(6)                    # 爬6页ip
    print(proxies_list)
    print('============正在检测ip是否可用============')
    can_use = check_ip(proxies_list)            # 获得可用ip
    print(can_use)

标签:use,ip,list,response,爬取,源码,proxies,page
From: https://blog.csdn.net/Pangaoyang_/article/details/140693565

相关文章

  • PixPro 全开源图床系统源码,非常强大的压缩率 自定义尺寸,支持多种格式
    PixPro全开源图床系统源码,非常强大的压缩率自定义尺寸,支持多种格式PixPro全开源图床系统源码,非常强大的压缩率自定义尺寸,支持多种格式一款专为个人需求设计的高效图床解决方案,集成了强大的图片压缩功能与优雅的前台后台管理界面。项目结构精简高效,提供自定义图片压缩率......
  • QQ音乐VIP歌曲批量下载后,一键全自动转换+ogg批量转码Mp3
    那天隔壁大妈笑眯眯地找到我,说:“阿星啊,大妈想学几首新的广场舞,你能不能帮大妈从QQ音乐里下几首歌?”我一听,这简单啊,立马答应下来。结果,一动手才发现,QQ音乐的VIP歌曲居然都是加密的,下载下来不是mgg就是mflac,根本没法直接听!于是,阿星开始了一场“解密+格式转换”的大冒险。经过......
  • 新版saas餐饮外卖小程序源码通用小程序,扫码点餐,DIY装修,代付,收银台,全开源
    新版saas餐饮外卖小程序源码通用小程序,扫码点餐,DIY装修,代付,收银台,全开源新版saas餐饮外卖小程序源码通用小程序,扫码点餐,DIY装修,代付,收银台,全开源使用场景:百货超市/奶茶店/加盟餐饮店/蔬菜店/零食店/咖啡店/水果店/便利店/蛋糕店通用小程序。营销玩法:优惠券、满额立减......
  • P2671 [NOIP2015 普及组] 求和 题解
    题目:P2671NOIP2015普及组求和题意给定一个带有颜色和数字的序列,我们要寻找三元组\((x,y,z)\)满足以下条件:\(y\)为\(x\)和\(z\)的中点且都为整数。\(color[x]=color[z]\)。我们命这样一个三元组对答案的贡献为\((x+z)*(num[x]+num[z])\)。整个序列的总价值为每个......
  • 常用端口申请IP SSL实现https教程
    在网络安全和数据保护方面,使用HTTPS协议来保护网站和应用程序的通信变得至关重要。一般情况下,HTTPS证书是基于域名签发的。但是,有时候我们可能需要为IP地址申请HTTPS证书,在一些特殊场景下确保通信的安全性。IPSSL证书也是SSL证书的一种,因其是颁发给IP地址使用的,所以我们......
  • python中scrapy爬取数据get()与getall()区别
    在使用scrapy进行爬取数据的时候,有些时候需要爬取的是一段文本,或者一个div里面有很多内容,这时候我们就要使用到get()或者getall()来获取数据: get():是获取的满足条件的第一个数据。getall():是获取的满足条件的所有数据。scrapyget()getall()原理在Scrapy中,get(......
  • Python爬虫:代理ip电商数据实战
    引言:数据访问管理引发的烦恼作为一名Python博主,爬虫技能对于获取和分析数据至关重要,经常爬一下,有益身心健康嘛。爬虫技术对很多人来说,不仅仅是一种工具,更像是一种艺术,帮助我们从互联网中,捕捉到有价值的信息。我经常就会用爬虫来爬取一些所需的数据,用来进行数据分析和模型训......
  • Springboot网络安全宣传小程序 毕业设计源码70468
                         摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,网络安全宣传小程序被用户普遍使用,为方便用户能够......
  • 【微信小程序开发】从0-1注册、下载、安装、开发保姆篇教程(附Demo源码)
    文章目录前期准备注册登陆下载安装创建项目项目结构版本管理程序页面生命周期新增页面功能实现本篇小结更多相关内容可查看前期准备要有前端开发基础,已安装NodeJS,若未安装请参考NodeJS安装并生成Vue脚手架(保姆级)可参考小程序开发官方文档进行学习,本文也是参考......
  • 一款简而轻的项目运维监控软件,支持低侵入式在线构建、自动部署、日常运维(附源码)
    前言在当今快速发展的软件开发领域,开发团队经常面临一系列运维挑战。没有专业运维人员的支持,开发人员不得不承担构建和部署项目的任务。面对不同项目的构建和部署命令,以及多环境的打包需求,开发人员需要一个能够简化这些流程的解-决方案。同时,监控多个项目的运行状态、远程连......