【python】爬取4K壁纸保存到本地文件夹【附源码】

2024-03-27 1390阅读

        图片信息丰富多彩,许多网站上都有大量精美的图片资源。有时候我们可能需要批量下载这些图片,而手动一个个下载显然效率太低。因此,编写一个简单的网站图片爬取程序可以帮助我们高效地获取所需的图片资源。 

目标网站:

【python】爬取4K壁纸保存到本地文件夹【附源码】

    如果出现模块报错

【python】爬取4K壁纸保存到本地文件夹【附源码】

        进入控制台输入:建议使用国内镜像源

pip install 模块名称 -i https://mirrors.aliyun.com/pypi/simple

         我大致罗列了以下几种国内镜像源:

清华大学
https://pypi.tuna.tsinghua.edu.cn/simple
阿里云
https://mirrors.aliyun.com/pypi/simple/
豆瓣
https://pypi.douban.com/simple/ 
百度云
https://mirror.baidu.com/pypi/simple/
中科大
https://pypi.mirrors.ustc.edu.cn/simple/
华为云
https://mirrors.huaweicloud.com/repository/pypi/simple/
腾讯云
https://mirrors.cloud.tencent.com/pypi/simple/

效果图:

【python】爬取4K壁纸保存到本地文件夹【附源码】

代码详解:

  1. get_imgurl_list(url, imgurl_list) 函数用来获取指定页面中的图片链接,并将这些链接存储在 imgurl_list 列表中。

    • 使用 requests.get(url=url, headers=headers) 发起请求获取页面内容。
    • 使用 etree.HTML(html_str) 将页面内容转换为 etree 对象,方便后续使用 XPath 进行解析。
    • 通过 XPath 定位到图片链接,并添加到 imgurl_list 中。
    • get_down_img(imgurl_list) 函数用来下载图片到本地存储。

      • 创建名为 "美女" 的文件夹用于存储下载的图片。
      • 遍历 imgurl_list 中的图片链接,逐个下载图片并保存到本地文件夹中。
      • 在 if __name__ == '__main__': 部分:

        • 设置需要爬取的页数 page_number = 10。
        • 循环构建每一页的链接,如 https://www.moyublog.com/95-2-2-{i}.html。
        • 调用 get_imgurl_list() 函数获取图片链接。
        • 调用 get_down_img() 函数下载图片到本地。

代码流程:

  1. 导入必要的库和模块:
import requests  # 用于发送HTTP请求
from lxml import etree  # 用于解析HTML页面
import time  # 用于控制爬取速度
import os  # 用于文件操作
  1. 定义函数get_imgurl_list(url, imgurl_list)用于获取图片链接:
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_data = etree.HTML(html_str)
    li_list = html_data.xpath("//ul[@class='clearfix']/li")
    for li in li_list:
        imgurl = li.xpath(".//a/img/@data-original")[0]
        imgurl_list.append(imgurl)
  • 发送GET请求获取网页内容。
  • 将网页内容转换为etree对象以便后续使用xpath进行解析。
  • 使用xpath定位所有的li标签,并遍历每个li标签获取图片链接,将链接添加到imgurl_list列表中。
    1. 定义函数get_down_img(imgurl_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'
            }
            img_data = requests.get(url=img_url, headers=headers).content
            img_path = './美女/' + str(n) + '.jpg'
            with open(img_path, 'wb') as f:
                f.write(img_data)
            n += 1
    
    • 创建名为"美女"的目录用于存放下载的图片。
    • 遍历图片链接列表,逐个发送GET请求下载图片数据,并将图片写入本地文件。每张图片以数字编号命名。
      1. 主程序部分:
      if __name__ == '__main__':
          page_number = 10  # 爬取页数
          imgurl_list = []  # 存放图片链接
          for i in range(0, page_number + 1):
              url = f'https://www.moyublog.com/95-2-2-{i}.html'
              print(url)
              get_imgurl_list(url, imgurl_list)
          get_down_img(imgurl_list)
      
      • 设定要爬取的页数page_number为10。
      • 初始化存放图片链接的列表imgurl_list。
      • 循环构建每一页的链接并调用get_imgurl_list()函数获取图片链接。
      • 最后调用get_down_img()函数下载图片到本地"美女"文件夹。

        为什么我们在获取数据的过程中需要用到IP池

        1. 应对反爬虫策略:许多网站会采取反爬虫措施,限制单个IP的访问频率或次数。通过使用数据获取服务,可以轮换多IP来模仿多个用户访问,降低被封禁的风险。

        2. 保证稳定性:有些数据获取服务可能存在不稳定的情况,包括IP连接速度慢、IP被找到等问题。通过建立数据获取服务,可以预先准备多个可用的IP地址,确保程序在某个IP不可用时可以快速切换到其他可用IP,提高爬虫程序的稳定性。

        3. 提高访问速度:IP池中的多个IP地址可以并发使用,实现多线程或异步请求,从而加快数据获取速度。通过在数据获取服务中保持一定数量的可用IP地址,可以实现更快速的数据抓取。

        4. 应对封禁风险:有些网站会根据某些特定的IP地址或IP段进行封禁,如果整个IP池中的IP都被封禁,可以及时更新IP池中的IP地址,避免影响爬虫程序的正常运行。

        5. 降低被识别的风险:当爬虫程序使用固定的IP地址进行访问时,容易被网站识别出是爬虫行为。

        【python】爬取4K壁纸保存到本地文件夹【附源码】

         完整代码:

                

        import requests  # python基础爬虫库
        from lxml import etree  # 可以将网页转换为Elements对象
        import time  # 防止爬取过快可以睡眠一秒
        import os
        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/@data-original")[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'}
                img_data = requests.get(url=img_url, headers=headers).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 = 10  # 爬取页数
            imgurl_list = []  # 存放图片链接
            # 1. 循环构建每页的链接
            for i in range(0, page_number + 1):
                # 页数拼接
                url = f'https://www.moyublog.com/95-2-2-{i}.html'
                print(url)
                # 2. 获取图片链接
                get_imgurl_list(url, imgurl_list)
            # 3. 下载图片
            get_down_img(imgurl_list)
        
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]