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

举报
袁袁袁袁满 发表于 2024/11/18 11:29:10 2024/11/18
【摘要】 Python爬虫实战:批量下载高清小姐姐壁纸(附上完整源码)

一、爬取目标

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

image.png

二、为什么要使用代理?

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

  • 匿名保护,保护隐私安全
  • 安全采集公开数据信息
  • 分散访问压力,提高爬取效率和稳定性。
  • 收集不同地区或代理服务器上的数据,用于数据分析和对比。

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

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

2、注册新用户,可以获得2+5共7美金免费试用产品的机会,简直特别香

三、数据采集实战

3.1 代码获取代理IP

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

image.png

2、填写信息:

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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

image.png

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获取成功:
image.png

3.2 导入模块

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

3.3 设置翻页

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

image.png

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

第一页:

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标签下:

image.png

我们创建一个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)

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

image.png

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 运行结果展示

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

image.png

四、AI助手升级体验

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

image.png

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

image.png

成功给出Python提取代理IP的代码,是不是非常Nice啊 !!!

五、总结

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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。