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

news2024/9/23 17:25:04

文章目录

  • 一、爬取目标
  • 二、实现效果
  • 三、准备工作
  • 四、代理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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EasyFlash移植使用- 关于单片机 BootLoader和APP均使用的情况

目前,我的STM32单片机,需要在BootLoader和APP均移植使用EasyFlash,用于参数管理和IAP升级使用。 但是由于Flash和RAM限制,减少Flash占用,我规划如下: BootLoader中移植EasyFlash使用旧版本,因为…

机器学习-基本知识

 任务类型 ◼ 有监督学习(Supervised Learning) 每个训练样本x有人为标注的目标t,学习的目标是发现x到t的映射,如分类、回归。 ◼ 无监督学习(Unsupervised Learning) 学习样本没有人为标注,学习的目的是发现数据x本身的分布规律&#xf…

ROS自学笔记二十: Gazebo里面仿真环境搭建

Gazebo 中创建仿真实现方式有两种:1直接添加内置组件创建仿真环境2: 手动绘制仿真环境 1.添加内置组件创建仿真环境 1.1启动 Gazebo 并添加组件 1.2保存仿真环境 添加完毕后,选择 file ---> Save World as 选择保存路径(功能包下: worlds 目录),文…

二维数组如何更快地遍历

二维数组如何更快地遍历 有时候,我们会发现,自己的代码和别人的代码几乎一模一样,但运行时间差了很多,别人是 AC \text{AC} AC,你是 TLE \text{TLE} TLE,这是为什么呢? 一个可能的原因是数组的…

延迟队列实现方案总结

日常开发中,可能会遇到一些延迟处理的消息任务,例如以下场景 ①订单支付超时未支付 ②考试时间结束试卷自动提交 ③身份证或其他验证信息超时未提交等场景。 ④用户申请退款,一天内没有响应默认自动退款等等。 如何处理这类任务,最…

http1,https,http2,http3总结

1.HTTP 当我们浏览网页时,地址栏中使用最多的多是https://开头的url,它与我们所学的http协议有什么区别? http协议又叫超文本传输协议,它是应用层中使用最多的协议, http与我们常说的socket有什么区别吗? …

2000-2021年上市公司产融结合度量数据

2000-2021年上市公司产融结合度量数据 1、时间:2000-2021年 2、指标:股票代码、年份、是否持有银行股份、持有银行股份比例、是否持有其他金融机构股份、产融结合 3、来源:上市公司年报 4、范围:上市公司 5、样本量&#xff…

4种类型WMS的简要说明

仓库管理系统(WMS)主要有四种类型:独立仓库管理系统、供应链管理系统中的仓库管理模块、ERP 系统中的仓库管理模块和基于云的仓库管理系统。 独立仓库管理系统 独立仓库管理系统提供的功能可实现日常仓库运营。公司可以使用WMS系统来监管和…

【MATLAB源码-第62期】基于matlab的DCSK(差分混沌移位键控调制)系统误码率仿真。

MATLAB 2022a 1、算法描述 DCSK(Differential Chaos Shift Keying)是一种差分混沌移位键控调制方式,常用于无线通信系统。其调制和解调的基本流程如下: 1. DCSK调制 1.1 生成混沌序列 - 初始条件:选择一个混沌映射&a…

『K8S 入门』一:基础概念与初步搭建

『K8S 入门』一:基础概念与初步搭建 一、kubernetes 组件 官方示图 抽象示图 Master 控制面板 Api-Server:接口服务,基于 REST 风格开放 k8s 接口的服务ControllerManager cloud-controller-manager:云控制管理器。第三方平…

Android图片加载框架库源码解析 - Coil

文章目录 一、什么是Coil二、引入Coil1、ImageView加载图片1.1、普通加载1.2、crossfade(淡入淡出)加载1.3、crossfade的动画时间1.4、placeholder1.5、error1.6、高斯模糊1.7、灰度变换1.8、圆形1.9、圆角 2、Gif加载3、SVG加载(不存在)4、视频帧加载5、监听下载过程6、取消下…

想翻译pdf文档,试了几个工具对比:有阿里(完全免费,快,好用,质量高,不用注册登录)道最好(有限免费) 百度(有限免费)和谷歌完全免费(网不好)

文档翻释作为基础设施,工作必备。 阿里 (完全免费,快,好用,质量高,不用注册登录,无广告)我给满分 https://translate.alibaba.com/#core-translation 先选好语言。 Google(完全免…

PDManer生成Postgis对应Schema数据库设计文档

项目开发数据库选择postGis,由于需要编写数据库设计说明书,因此选择工具PDManer生成数据库设计文档,但是postGis一个数据库,可能对应多个Schema。如下图所示: 1.编写数据库设计文档时,仅需编写hly这个Sche…

美妆造型教培服务预约小程序的作用是什么

美业市场规模很高,细分类目更是比较广,而美妆造型就是其中的一类,从业者也比较多,除了学校科目外,美妆造型教培机构也有生意。 对机构来说主要目的是拓客引流-转化及赋能,而想要完善路径却是不太容易&…

Ubuntu16.04 python matplotlib 坐标轴标签出现中文乱码

问题:坐标轴打印中文时,显示会乱码 import matplotlib.pyplot as plt plt.ylabel(时间刻度)原因:matplotlib里面没有中文字体解决方法:下载SimHei字体,快捷方法是使用everything直接在windows搜索simhei.ttf&#xff…

计算机基础知识41

前端 # 前端是所有跟用户直接打交道 比如:PC页面、手机页面、汽车显示屏,肉眼可以看见的 # 后端:一堆代码,用户不能够直接看到,不直接与用户打交道 常见的后端:Python、Java、Go等 # 学了前端就可以做全栈…

0004net程序设计-抗疫物资

文章目录 **摘** **要**目 录系统设计开发环境 摘 要 近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,抗疫物资管理系统利用计算机网络实现信息化管理,使整个抗疫物资管理…

Kafka - 3.x 分区分配策略及再平衡不完全指北

文章目录 生产经验——分区分配策略及再平衡生产者分区分配之Range及再平衡Range分区策略原理Range分区分配策略及再平衡案例 生产者分区分配之RoundRobin策略及再平衡RoundRobin分区策略原理RoundRobin分区分配策略及再平衡案例 生产者分区分配之Sticky及再平衡Sticky分区策略…

网络协议--TCP的超时与重传

21.1 引言 TCP提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该数据。对任何实现而言,关键之处就在于超时和重…

Android NDK开发详解之Android.mk探秘

Android NDK开发详解之Android.mk探秘 概览基础知识变量和宏NDK 定义的 include 变量CLEAR_VARSBUILD_EXECUTABLEBUILD_SHARED_LIBRARYBUILD_STATIC_LIBRARYPREBUILT_SHARED_LIBRARYPREBUILT_STATIC_LIBRARY 目标信息变量TARGET_ARCHTARGET_PLATFORMTARGET_ABI 模块描述变量LOC…