写点什么

Python 爬虫实战:批量下载高清小姐姐壁纸(附上完整源码)

作者:袁袁袁袁满
  • 2024-11-18
    四川
  • 本文字数:4510 字

    阅读完需:约 15 分钟

Python爬虫实战:批量下载高清小姐姐壁纸(附上完整源码)

一、爬取目标

在日常生活或工作中,我们用的最多的就是手机,一个养眼的壁纸能让人心情愉悦(狗头保命),手动一个个下载壁纸显然是非常繁琐且耗时的。因此,本文将介绍如何使用 Python 爬虫技术批量下载好看的壁纸(网站地址:http://www.netbian.com/shouji/meinv/index.htm):


二、为什么要使用代理?

使用代理 IP 可以带来以下好处:


  • 匿名保护,保护隐私安全

  • 安全采集公开数据信息

  • 分散访问压力,提高爬取效率和稳定性。

  • 收集不同地区或代理服务器上的数据,用于数据分析和对比。


由于我们需要批量下载壁纸为了能安全快速的采集,所以就需要使用到代理 IP,博主这里使用的是亮数据家的代理 IP,体验下来的感受有几点:


1、响应速度快,代理质量高


2、<font color=red size=3>注册新用户,可以获得 2+5 共 7 美金免费试用产品的机会,简直特别香

三、数据采集实战

3.1 代码获取代理 IP

1、首先打开官网,点击注册: 亮数据官网



2、填写信息:



3、填写完上图中的注册页面信息,点击“新建账户”提交后,网页会显示(如下图)- 验证邮件已发送至注册邮箱:



4、很快就可以在注册邮箱里(如下图),找到一封名为“Bright Data - Welcome”的验证邮件,点击登录,即可直接进入产品界面,开始使用。此时完成所有注册步骤均已完成:



5、注册登录后,选择查看代理 IP 产品:



6、有动态 IP、静态 IP、机房 IP、移动代理 IP 可以选择,博主这里选择是机房 IP:



7、配置通道,可以设置 IP 类型(共享/独享)、IP 数、IP 来源国家等等:



8、配置完成后可以看到主机、用户名和密码,等下我们添加到代码中去获取 IP:



9、下面代码只需要修改刚才获取到的主机、用户名和密码,即可返回代理 IP:


import requests  # python基础爬虫库

def get_ip(): """获取亮数据代理IP""" host = '你的主机' # 主机 user_name = '你的用户名' # 用户名 password = '你的密码' # 密码
proxy_url = f'http://{user_name}:{password}@{host}' # 将上面三个参数拼接为专属代理IP获取网址 proxies = { 'http':proxy_url, 'https':proxy_url }
url = "http://lumtest.com/myip.json" # 默认获取的接口(不用修改) response = requests.get(url,proxies=proxies,timeout=10).text # 发送请求获取IP # print('代理IP详情信息:',response) response_dict = eval(response) # 将字符串转为字典,方便我们提取代理IP ip = response_dict['ip'] # print('IP:',ip) return ip

get_ip()
复制代码


成功返回 IP 获取成功:


3.2 导入模块

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

3.3 设置翻页

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



分析翻页逻辑,可以看到只有后缀在变化:


第一页:


http://www.netbian.com/shouji/meinv/index.htm
复制代码


第二页:


http://www.netbian.com/shouji/meinv/index_2.htm
复制代码


第三页:


http://www.netbian.com/shouji/meinv/index_3.htm
复制代码


所以代码从第二页后面的后缀进行拼接:


if __name__ == '__main__':    # 设置需要爬取页数    page_number = 69    # 循环构建每页的链接    for page in range(1,page_number+1):        # 页数拼接        if page == 1:            url = 'http://www.netbian.com/shouji/meinv/index.htm'        else:            url = f'http://www.netbian.com/shouji/meinv/index_{page}.htm'        print(url)
复制代码

3.4 获取图片链接

可以看到所有图片 url 都在 ul 标签 > li 标签 > 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("//div[@class='list list-phone']/ul/li")    # 打印一下li标签个数看是否和一页的电影个数对得上    print(len(li_list))  # 输出20,没有问题    for li in li_list:        imgurl = li.xpath(".//a/img/@src")[0]        print(imgurl)        # 写入列表        imgurl_list.append(imgurl)
复制代码


运行结果,成功拿到所有图片链接:


3.5 下载图片

图片链接有了,定义一个 get_down_img(img_url_list)函数,传入图片链接列表,然后遍历列表,利用 get_ip()函数获取代码 IP 每次请求都切换 IP 保证安全稳定的下载,将所有图片下载到指定文件夹:


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'}        # 添加代理IP(这里代理IP这里需要看`3.1 免费获取代理IP`自己去获取)        proxies  = get_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
复制代码

3.6 调用主函数

这里我们可以设置修改爬取的页码:


if __name__ == '__main__':    page_number = 5 # 设置需要爬取页数    imgurl_list = [] # 保存所有图片链接    # 1、循环构建每页的链接    for page in range(1,page_number+1):        # 页数拼接        if page == 1:            url = 'http://www.netbian.com/shouji/meinv/index.htm'        else:            url = f'http://www.netbian.com/shouji/meinv/index_{page}.htm'        print('网站页数链接', url)        # 2、获取图片链接        get_imgurl_list(url, imgurl_list)    # 3、下载图片到指定文件夹    get_down_img(imgurl_list)
复制代码

3.7 完整源码

下面完整代码需要看 3.1 获取 并 修改 get_ip()函数中的 代理 IP 信息(主机、用户名和密码),还可以修改关键词和爬取的页数:


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

def get_ip(): """获取亮数据代理IP""" host = '你的主机' # 主机 user_name = '你的用户名' # 用户名 password = '你的密码' # 密码
proxy_url = f'http://{user_name}:{password}@{host}' # 将上面三个参数拼接为专属代理IP获取网址 proxies = { 'http':proxy_url, 'https':proxy_url }
url = "http://lumtest.com/myip.json" # 默认获取的接口(不用修改) response = requests.get(url,proxies=proxies,timeout=10).text # 发送请求获取IP # print('代理IP详情信息:',response) response_dict = eval(response) # 将字符串转为字典,方便我们提取代理IP ip = response_dict['ip'] # print('IP:',ip) return ip

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("//div[@class='list list-phone']/ul/li") # 打印一下li标签个数看是否和一页的电影个数对得上 print(len(li_list)) # 输出20,没有问题 for li in li_list: imgurl = li.xpath(".//a/img/@src")[0] 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'} # 添加代理IP(这里代理IP这里需要看`3.1 免费获取代理IP`自己去获取) proxies = get_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__': page_number = 69 # 设置需要爬取页数 imgurl_list = [] # 保存所有图片链接 # 1、循环构建每页的链接 for page in range(1,page_number+1): # 页数拼接 if page == 1: url = 'http://www.netbian.com/shouji/meinv/index.htm' else: url = f'http://www.netbian.com/shouji/meinv/index_{page}.htm' print('网站页数链接', url) # 2、获取图片链接 get_imgurl_list(url, imgurl_list) # 3、下载图片到指定文件夹 get_down_img(imgurl_list)
复制代码

3.8 运行结果展示

在指定文件夹下成功下载我们需要的壁纸:


四、AI 助手升级体验

众多初次尝试使用代理的新用户,在面对代理设置及相关技术细节时,往往感到陌生与困惑,一时之间难以入手。为此,亮数据开发团队特别在平台中集成了 ChatGPT 助手,在登录界面上方可以输入框,就可以开始使用 AI 提问了:



比如:我们提问”Python 如何使用代理 IP“



成功给出 Python 提取代理 IP 的代码:



是不是非常 Nice 啊 !!!

五、总结

代理 IP 对于爬虫是密不可分的,代理 IP 可以安全采集公开数据信息,有需要代理 IP 的小伙伴可以试试亮数据家的代理 IP,现在注册再送 15 美金特别试用金!并且首次充值优惠充多少送多少,最高 500 美金。数据中心代理和静态代理,价格大幅下降和调整收费模式。注册地址::亮数据官网

用户头像

还未添加个人签名 2022-04-28 加入

还未添加个人简介

评论

发布
暂无评论
Python爬虫实战:批量下载高清小姐姐壁纸(附上完整源码)_Python_袁袁袁袁满_InfoQ写作社区