Python爬虫实战(六)——使用代理IP批量下载高清小姐姐图片(附上完整源码)

文章目录

  • 一、爬取目标
  • 二、实现效果
  • 三、准备工作
  • 四、代理IP
    • 4.1 代理IP是什么?
    • 4.2 代理IP的好处?
    • 4.3 获取代理IP
    • 4.4 Python获取代理IP
  • 五、代理实战
    • 5.1 导入模块
    • 5.2 设置翻页
    • 5.3 获取图片链接
    • 5.4 下载图片
    • 5.5 调用主函数
    • 5.6 完整源码
    • 5.7 免费代理不够用怎么办?
  • 六、总结

一、爬取目标

本次爬取的目标是某网站4K高清小姐姐图片:

二、实现效果

实现批量下载指定关键词的图片,存放到指定文件夹中:

三、准备工作

Python:3.10

编辑器:PyCharm

第三方模块,自行安装:

pip install requests # 网页数据爬取
pip install lxml # 提取网页数据

四、代理IP

4.1 代理IP是什么?

代理IP是一种安全功能,可以充当网络中间平台,使得用户电脑可以先访问代理IP,然后由代理IP访问目标网站页面,从而起到防火墙的作用。代理IP具有多种类型,包括HTTP代理、HTTPS代理、SOCKS代理等,分别适用于不同的网络通信需求。使用代理IP可以提高访问速度、保护隐私信息、突破下载限制以及作为防火墙保护网络安全。

4.2 代理IP的好处?

使用代理IP的好处有以下几个方面:

  • 隐藏真实IP地址:使用代理IP可以将您的真实IP地址隐藏起来,确保您的在线活动更加匿名和隐私保护。这对于保护个人隐私和防止追踪非常重要。

  • 绕过网络限制:有些地区或网络环境可能存在访问限制,如某些网站、社交媒体平台或在线服务被屏蔽。通过使用代理IP,可以绕过这些限制,访问被封锁的内容或服务。

  • 提高访问速度:代理IP可以缓存和压缩网络数据,从而提高网页加载速度和下载速度。这对于访问速度较慢的网站或在网络拥堵时特别有用。

  • 数据采集和爬虫应用:代理IP可以用于数据采集和爬虫应用,通过使用不同的代理IP地址,可以避免被目标网站识别和封禁,从而更好地进行数据采集和爬虫操作。

  • 地理位置伪装:有时候需要在网站或应用中模拟不同的地理位置,以获取特定的服务或信息。使用代理IP可以实现地理位置的伪装,使网站或应用认为您位于不同的地理位置。

4.3 获取代理IP

博主最近写爬虫,发现了一款不错的代理IP,响度速度快,代理质量高,有免费试用也有超值套餐:云立方代理IP

1、打开云立方的官网,点击代理IP:http://www.yunlifang.cn/dailiIP.asp

2、我们这里免费试用,测试一下效果:

3、然后找客服说明免费试用一下,说明需要代理IP的时长、数量等信息:

然后客服给我们账号密码,请求地址和端口号:

接下来就是使用Python去获取代理IP。

4.4 Python获取代理IP

我们用Python获取代理IP,注意将代码中的账号、密码、地址、端口替换为刚才客服给的账号信息

def get_ip():
    """获取代理IP"""
    # 这里替换为刚才客服给的账号信息
    proxyUser = "你的账号"  # 账户
    proxyPass = "你的密码"  # 密码
    proxyHost = "你的地址"  # 地址
    proxyPort = "你的端口号"  # 端口
    proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"

    proxies = {
        "http": proxyMeta,
        "https": proxyMeta
    }
    print(proxies)
    return proxies

get_ip()

这里我用的隧道代理IP(隧道代理IP:是指下面那个账号链接每次去访问网页就会自动切换IP):

五、代理实战

5.1 导入模块

import requests  # python基础爬虫库
from lxml import etree  # 可以将网页转换为Elements对象
import time  # 防止爬取过快可以睡眠一秒
import os # 创建文件

5.2 设置翻页

首先我们来分析一下网站的翻页,一共有62页:

第一页链接:

https://pic.netbian.com/4kmeinv/index.html

第二页链接:

https://pic.netbian.com/4kmeinv/index_2.html

第三页链接:

https://pic.netbian.com/4kmeinv/index_3.html

可以看出每页只有index后面从第二页开始依次加上_页码,所以用循环来构造所有网页链接:

if __name__ == '__main__':
    # 页码
    page_number = 1
    # 循环构建每页的链接
    for i in range(1,page_number+1):
        # 第一页固定,后面页数拼接
        if i ==1:
            url = 'https://pic.netbian.com/4kmeinv/index.html'
        else:
            url = f'https://pic.netbian.com/4kmeinv/index_{i}.html'

5.3 获取图片链接

可以看到所有图片url都在 ul标签 > a标签 > img标签下:

我们创建一个get_imgurl_list(url)函数传入网页链接获取 网页源码,用xpath定位到每个图片的链接:

def get_imgurl_list(url,imgurl_list):
    """获取图片链接"""
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
    # 发送请求
    response = requests.get(url=url, headers=headers)
    # 获取网页源码
    html_str = response.text
    # 将html字符串转换为etree对象方便后面使用xpath进行解析
    html_data = etree.HTML(html_str)
    # 利用xpath取到所有的li标签
    li_list = html_data.xpath("//ul[@class='clearfix']/li")
    # 打印一下li标签个数看是否和一页的电影个数对得上
    print(len(li_list))  # 输出20,没有问题
    for li in li_list:
        imgurl = li.xpath(".//a/img/@src")[0]
        # 拼接url
        imgurl = 'https://pic.netbian.com' +imgurl
        print(imgurl)
        # 写入列表
        imgurl_list.append(imgurl)

运行结果:

点开一个图片链接看看:

OK没问题!!!

5.4 下载图片

图片链接有了,代理IP也有了,下面我们就可以下载图片。定义一个get_down_img(img_url_list)函数,传入图片链接列表,然后遍历列表,每下载一个图片切换一次代理,将所有图片下载到指定文件夹:

def get_down_img(imgurl_list):
    # 在当前路径下生成存储图片的文件夹
    os.mkdir("小姐姐")
    # 定义图片编号
    n = 0
    for img_url in imgurl_list:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
        # 调用get_ip函数,获取代理IP
        proxies = get_ip()
        # 每次发送请求换代理IP,获取图片,防止被封
        img_data = requests.get(url=img_url, headers=headers, proxies=proxies).content
        # 拼接图片存放地址和名字
        img_path = './小姐姐/' + str(n) + '.jpg'
        # 将图片写入指定位置
        with open(img_path, 'wb') as f:
            f.write(img_data)
        # 图片编号递增
        n = n + 1

5.5 调用主函数

这里我们可以设置需要爬取的页码:

if __name__ == '__main__':
    # 1. 设置获取的页数
    page_number = 63
    imgurl_list = [] # 用于存储所有的图片链接
    # 2. 循环构建每页的链接
    for i in range(1,page_number+1):
        # 第一页固定,后面页数拼接
        if i ==1:
            url = 'https://pic.netbian.com/4kmeinv/index.html'
        else:
            url = f'https://pic.netbian.com/4kmeinv/index_{i}.html'
        # 3. 获取图片链接
        get_imgurl_list(url,imgurl_list)
    # 4. 下载图片
    get_down_img(imgurl_list)

5.6 完整源码

注意将get_ip()函数代码中的账号、密码、地址、端口替换为刚才客服给的账号信息

import requests  # python基础爬虫库
from lxml import etree  # 可以将网页转换为Elements对象
import time  # 防止爬取过快可以睡眠一秒
import os


def get_ip():
    """获取代理IP"""
    # 这里替换为刚才客服给的信息代理服务器
    proxyUser = "你的账号"  # 账户
    proxyPass = "你的密码"  # 密码
    proxyHost = "你的地址"  # 地址
    proxyPort = "你的端口号"  # 端口
    proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"

    proxies = {
        "http": proxyMeta,
        "https": proxyMeta
    }
    print(proxies)
    return proxies


def get_imgurl_list(url,imgurl_list):
    """获取图片链接"""
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
    # 发送请求
    response = requests.get(url=url, headers=headers)
    # 获取网页源码
    html_str = response.text
    # 将html字符串转换为etree对象方便后面使用xpath进行解析
    html_data = etree.HTML(html_str)
    # 利用xpath取到所有的li标签
    li_list = html_data.xpath("//ul[@class='clearfix']/li")
    # 打印一下li标签个数看是否和一页的电影个数对得上
    print(len(li_list))  # 输出20,没有问题
    for li in li_list:
        imgurl = li.xpath(".//a/img/@src")[0]
        # 拼接url
        imgurl = 'https://pic.netbian.com' +imgurl
        print(imgurl)
        # 写入列表
        imgurl_list.append(imgurl)


def get_down_img(imgurl_list):
    # 在当前路径下生成存储图片的文件夹
    os.mkdir("小姐姐")
    # 定义图片编号
    n = 0
    for img_url in imgurl_list:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
        # 调用get_ip函数,获取代理IP
        proxies = get_ip()
        # 每次发送请求换代理IP,获取图片,防止被封
        img_data = requests.get(url=img_url, headers=headers, proxies=proxies).content
        # 拼接图片存放地址和名字
        img_path = './小姐姐/' + str(n) + '.jpg'
        # 将图片写入指定位置
        with open(img_path, 'wb') as f:
            f.write(img_data)
        # 图片编号递增
        n = n + 1

if __name__ == '__main__':
    # 1. 设置获取的页数
    page_number = 50
    imgurl_list = [] # 用于存储所有的图片链接
    # 2. 循环构建每页的链接
    for i in range(1,page_number+1):
        # 第一页固定,后面页数拼接
        if i ==1:
            url = 'https://pic.netbian.com/4kmeinv/index.html'
        else:
            url = f'https://pic.netbian.com/4kmeinv/index_{i}.html'
        # 3. 获取图片链接
        get_imgurl_list(url,imgurl_list)
    # 4. 下载图片
    get_down_img(imgurl_list)

运行结果:

下载成功了没有报错,代理IP的质量还是不错的!!!

5.7 免费代理不够用怎么办?

免费的代理不够用可以看看云立方家的套餐还是蛮便宜的:http://www.yunlifang.cn/dailiIP.asp

六、总结

代理IP对于爬虫是密不可分的,代理IP可以帮助爬虫隐藏真实IP地址,有需要代理IP的小伙伴可以试试云立方家的代理IP:云立方代理IP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/110346.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ 自引用指针this(整理)

使用例子&#xff1a; #include <iostream> #include <Windows.h> using namespace std; class A { public:A(int x1){x x1;}void disp(){cout<<"this"<<this<<" when x"<<this->x<<endl;} private:int x;…

【工具使用】NPS内网穿透工具介绍

文章目录 前言一、内网穿透二、NPS概述三、NPS原理四、NPS服务器搭建(一)云服务器配置 五、NPS内网穿透演示(一)演示案例一(二)演示案例二 六、NPS内网穿透检测建议(一)流量监控(二)流量协议分析(三)网络行为异常检测 七、NPS内网穿透防范建议(一)阻止或隔离流量(二)更新和强化…

14技术太卷我学APEX-RESTful服务全自动Autorest

Oracle REST 数据服务 (ORDS) 的 AutoREST 功能&#xff0c;该功能允许您将表和视图等自动公开为 RESTful Web 服务。这个太好可不用自己费劲巴拉的定义RESTful数据服务了。 1 先准备测试数据表 登录APEX现在开发平台 [https://apex.oracle.com/pls/apex/r/apex/workspace-si…

Unity UniTask【安装】

窗口→包管理器&#xff0c;输入GitURL&#xff1a;https://github.com/Cysharp/UniTask.git?pathsrc/UniTask/Assets/Plugins/UniTask 如果上述方式不行&#xff0c;那就直接导入UniTask包&#xff0c;下载地址&#xff1a;Unity3D异步神器UniTask2.4.1包资源-CSDN文库

DBA笔记(1)

目录 1、rpm yum 命令的使用&#xff0c;参数的含义 rpm命令&#xff1a; yum命令&#xff1a; 2、上传镜像至虚拟机搭建本地yum源 3、chown chomd 命令每一个参数的含义 chown命令&#xff1a; chmod命令&#xff1a; 4、fdisk partd 硬盘分区命令用法 fdisk命令&am…

Seata入门系列【15】@GlobalLock注解使用场景及源码分析

1 前言 在Seata 中提供了一个全局锁注解GlobalLock&#xff0c;字面意思是全局锁&#xff0c;搜索相关文档&#xff0c;发现资料很少&#xff0c;所以分析下它的应用场景和基本原理&#xff0c;首先看下源码中对该注解的说明&#xff1a; // 声明事务仅在单个本地RM中执行 //…

【错误解决方案】ModuleNotFoundError: No module named ‘ngboost‘

1. 错误提示 在python程序&#xff0c;尝试导入一个名为ngboost的模块&#xff0c;但Python提示找不到这个模块。 错误提示&#xff1a;ModuleNotFoundError: No module named ‘ngboost‘ 2. 解决方案 出现上述问题&#xff0c;可能是因为你还没有安装这个模块&#xff0c;…

探索环幕投影系统在沉浸式展厅设计中的应用优势

伴随着数字化时代的快速发展&#xff0c;以往的静态展示方式已经无法满足人们对内容展览展示的需求&#xff0c;因此需要利用先进的多媒体互动技术&#xff0c;来提升观众的参观体验&#xff0c;而其中环幕投影系统便是用于建设沉浸式空间的主流技术之一&#xff0c;其被应用在…

【Linux】Linux的安装以及常见命令

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Linux的相关操作吧 一.Linux的安装 1.创建虚拟机 2.选择linux 3.配置虚拟机 4.开启虚拟机 默认回车即可 5.安装linux 5.登录账户 6.解决网络问题 ①先查看一下…

宇信科技:强势行业加速融入AIGC,同时做深做细

【科技明说 &#xff5c; 重磅专题】 大家可能没有想到&#xff0c;一向对外低调行事的宇信科技&#xff0c;在AIGC方面2023年就已经训练出了适配金融场景的垂直模型&#xff0c;并应用到了各产品线上&#xff0c;同时结合通用大模型预研了宇信金融系统编程大模型。宇信金融系…

IDEA优雅自动生成类注释和快捷键生成方法注释

生成类注释 Preferences->Editor->File and Code Templates-> Includes ->File Header 注释模板&#xff1a; /*** Classname ${NAME}* Description ${description}* Date ${DATE} ${TIME}* Created by ZouLiPing*/生成方法和字段注释 查看IDEA自动配置java快捷…

Qwt QwtScaleDraw自定义坐标轴

1.概述 QwtScaleDraw 是 Qt 绘图库 Qwt 中的一个类&#xff0c;用于绘制坐标轴刻度线和刻度标签。它提供了一些方法和属性来设置刻度线和标签的样式、布局和对齐方式。 以下是类继承关系&#xff1a; 2.常用方法 标签相关方法&#xff1a; setLabelRotation(double angle)&…

一、【Photoshop如何根据不同类型图像抠图】

文章目录 前言图形结构1、规则图形2、不规则图形 图形颜色1、轮廓清晰2、颜色分明 前言 当我们有抠图需求的时候&#xff0c;不要一开始就想着我怎么去把它抠出来&#xff0c;首先应该分析图形的特点&#xff0c;然后再去选取合适的工具&#xff0c;这样才可以做到事半功倍&am…

UDP数据报套接字编程

1. 什么是网络编程&#xff1f; 网络编程&#xff0c;指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff08;或称为网络数据传输&#xff09;。 这里只是在开发学习的时候使用的是&#xff0c;不同的进程来代表不同的主机来模拟网络通信…

python:使用Scikit-image对遥感影像进行傅里叶变换特征提取(fourier)

作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行傅里叶变换特征提取(fourier),并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 傅里叶变换特征提取是一种数学工具,用于将图像中的细节、纹理和边缘信息以不同频率的方式呈现…

3.6每日一题(线性方程求通解)

1、判断类型选择方法&#xff1a;发现以y为未知函数&#xff0c;以x为自变量&#xff0c;不符合我们学过的类型 2、此时有两种方法&#xff1a; &#xff08;1&#xff09;x 与 y 对调&#xff0c;此时 x 为未知函数&#xff0c;y 为自变量 &#xff08;2&#xff09;变量代换…

吉他、班卓琴和贝斯吉他降分器:Arobas Music Guitar 8.1.1

Arobas Music Guitar 是一款专业的吉他、班卓琴和贝斯吉他降分器。在熟练的手中&#xff0c;它不仅可以让您创作&#xff0c;还可以编辑、聆听和录制&#xff0c;以及导入和导出乐谱。如果有人感兴趣的话&#xff0c;录音是在八个轨道上进行的&#xff0c;你可以为每个轨道单独…

reactos 可调试光盘映像

链接&#xff1a;https://pan.baidu.com/s/13M9BZN4IDrWLc3bjnHO79g?pwd0gst 提取码&#xff1a;0gst

视频增强修复软件Topaz Video AI mac中文版支持功能

Topaz Video AI mac是一款使用人工智能技术对视频进行增强和修复的软件。它可以自动降噪、去除锐化、减少压缩失真、提高清晰度等等。Topaz Video AI可以处理各种类型的视频&#xff0c;包括低分辨率视频、老旧影片、手机录制的视频等等。 使用Topaz Video AI非常简单&#xff…