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 proxiesget_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]# 拼接urlimgurl = 'https://pic.netbian.com' +imgurlprint(imgurl)# 写入列表imgurl_list.append(imgurl)

运行结果:

点开一个图片链接看看:

OK没问题!!!

5.4 下载图片

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

def get_down_img(imgurl_list):# 在当前路径下生成存储图片的文件夹os.mkdir("小姐姐")# 定义图片编号n = 0for 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函数,获取代理IPproxies = 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 = 63imgurl_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 osdef get_ip():"""获取代理IP"""# 这里替换为刚才客服给的信息代理服务器proxyUser = "你的账号"  # 账户proxyPass = "你的密码"  # 密码proxyHost = "你的地址"  # 地址proxyPort = "你的端口号"  # 端口proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"proxies = {"http": proxyMeta,"https": proxyMeta}print(proxies)return proxiesdef 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]# 拼接urlimgurl = 'https://pic.netbian.com' +imgurlprint(imgurl)# 写入列表imgurl_list.append(imgurl)def get_down_img(imgurl_list):# 在当前路径下生成存储图片的文件夹os.mkdir("小姐姐")# 定义图片编号n = 0for 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函数,获取代理IPproxies = 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 + 1if __name__ == '__main__':# 1. 设置获取的页数page_number = 50imgurl_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.hqwc.cn/news/154647.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2021ICPC沈阳】EFBJHL

不知道为什么感觉以前的场要比现在的简单一点,虽然这场VP虽然题数到了但是还是差点罚时.... 现在的有些场感觉连签到都要签半天,比如前几天的ICPC西安和CCPC桂林,看了下题都不简单 这场甚至银牌题都没什么思维,只需要算法的板子…

【OpenCV实现图像找到轮廓的不同特征,就像面积,周长,质心,边界框等等。】

文章目录 概要图像矩凸包边界矩形 概要 OpenCV是一个流行的计算机视觉库,它提供了许多图像处理和分析功能,其中包括查找图像中物体的轮廓。通过查找轮廓,可以提取许多有用的特征,如面积、周长、质心、边界框等。 以下是几种使用…

【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割7(数据预处理)

在上一节:【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割6(数据预处理) 中,我们已经得到了与mhd图像同seriesUID名称的mask nrrd数据文件了,可以说是一一对应了。 并且,mask的文件,还根据结…

FANUC机器人PRIO-621和PRIO-622设备和控制器没有运行故障处理

FANUC机器人PRIO-621和PRIO-622设备和控制器没有运行故障处理 如下图所示,新的机器人开机后提示报警: PRIO-621 设备没有运行 PRIO-622 控制器没有运行 我们首先查看下手册上的报警代码说明,如下图所示, 如下图所示&#xff0c…

DSP 开发例程(5): tcp_server

目录 DSP 开发例程(5): tcp_server创建工程源码编辑tcp_echo.chelloWorld.c 调试说明 DSP 开发例程(5): tcp_server 此例程实现在 EVM6678L 开发板上创建 TCP Server进程, 完成计算机与开发板之间的 TCP/IP 通信. 例程源码可从我的 gitee 仓库上克隆或下载. 点击 DSP 开发教程…

IDEA MyBatisX插件介绍

一、前言 前几年写代码的时候,要一键生成DAO、XML、Entity基础代码会采用第三方工具,比如mybatis-generator-gui等,现在IDEA或Eclipse都有对应的插件,像IDEA中MyBatisX就是一个比较好用的插件。 二、MyBatisX安装配置使用 MyBa…

【UE 模型描边】UE5中给模型描边 数字孪生 智慧城市领域 提供资源下载

目录 0 引言1 Soft Outlines1.1 虚幻商城1.2 使用步骤 2 Auto Mesh Outlines2.1 虚幻商城2.2 使用步骤 3 Survivor Vision3.1 虚幻商城3.2 使用步骤 结尾 🙋‍♂️ 作者:海码007📜 专栏:UE虚幻引擎专栏💥 标题&#xf…

大数据-Storm流式框架(三)--Storm搭建教程

一、两种搭建方式 1、storm单节点搭建 2、完全分布式搭建 二、storm单节点搭建 准备 下载地址:Index of /dist/storm 1、环境准备: Java 6 Python 2.6.6 2、上传、解压安装包 3、在storm目录中创建logs目录 mkdir logs 启动 ./storm help …

原型和原型链的理解

记住一句话:万物皆对象 对于原型和原型链,我们要知道一下几个:函数对象,实例对象、原型对象 1)函数对象——就是平时称的对象; 2)实例对象——new出的对象或者{ }; 3)原型…

Jenkins项目部署

使用jenkins部署项目 简易版使用jenkins部署项目 将war包部署到tomcat中 将已有的war包部署到tomcat中(jenkins与tomcat在同一台主机) 点击Jenkins主页的新建任务 输入任务名称 选择构建一个自由风格的软件项目后点击确定 在构建内添加构建步骤,选择执行shell 输入…

【Android】Android Framework系列---CarPower电源管理

Android Framework系列—CarPower电源管理 智能座舱通常包括中控系统、仪表系统、IVI系统 、后排娱乐、HUD、车联网等。这些系统需要由汽车电源进行供电。由于汽车自身的特殊供电环境(相比手机方便的充电环境,汽车的蓄电池如果没有电是需要专业人士操作…

使用 node.js 简单搭建Web服务 使用node简单搭建后端服务 使用node搭建服务

使用 node.js 简单搭建Web服务 使用node简单搭建后端服务 使用node搭建服务 1、初始化项目2、安装 Express.js Web 服务框架3、创建 app.js 主入口文件, 并且实现 GET、POST请求4、启动服务5、请求测试 1、初始化项目 例如项目名为 node-server-demo mkdir node-server-demo进…