python网络爬虫快速下载4K高清壁纸

本文介绍如何利用Python网络爬虫从彼岸图网下载4K高清壁纸,包括观察页面布局获取源代码、解析图片地址和名称、持久性存储图片以及代码实现和总结。

python网络爬虫快速下载4K高清壁纸

此处给出下载壁纸的链接地址彼岸图网,进入网站之后,我们看到可以下载风景,游戏,动漫,美女等类型的4K图片,装逼一下,re库有贪婪匹配,那我们就写一个通用代码来下载网站全部的图片。


1. 观察页面布局,获取页面源代码

  • 打开彼岸图网的链接之后,进入开发者模式,快捷键为(Fn + F12),观察网页源代码发现,我们所要解析的图片都存放在了body标签下面的<div,class = “wrap clearfix”>中的<div , class = “slist”>下面的所有的li标签下。
    图片的存储位置

  • 为了提示用户可下载的最大页码数量,我们还需要知道最大页码的存放位置,通过定位发现,最大页码存储在<div,class = “wrap clearfix”>中的<div , class = “page”>标签下面。

max_page = tree1.xpath('//div[@class = "page"]/a[7]/text()')[0]
  • 此时,我们已经找到了需要解析的图片和页码的位置,为接下来解析提供了基础。

2. 解析图片的地址和名称
接上述第一点,我们发现了图片的地址存储在li标签下面a标签img的属性src中,属性alt中存储着图片的名称。我们选择xpath进行解析,需要导入第三方库lxml。

img_list = "http://pic.netbian.com" + li.xpath('./a/img/@src')[0]
title_list = li.xpath('./a/img/@alt')[0] + ".jpg"

3. 进行持久性存储
在存储之前在子目录下面新建一个文件夹进行存储照片,之后将图片保存下来。

if not os.path.exists('./picLibs'):
            os.mkdir('./picLibs')
        for li in li_list:
            # ./表示的是当前目录下面进行操作
            img_list = "http://pic.netbian.com" + li.xpath('./a/img/@src')[0]
            title_list = li.xpath('./a/img/@alt')[0] + ".jpg"
            #print(title_list,img_list)

            img_data = requests.get(url = img_list,headers = headers).content
            img_path = './picLibs/' + title_list
            with open(img_path,'wb') as fp:
                fp.write(img_data)
                print(title_list,"保存成功!!!")

4. 代码和总结

import requests
from lxml import etree
import os
import sys

if __name__ == "__main__":

    message_list = ['fengjing','meinv','youxi','dongman','yingshi','mingxing','qiche','dongwu','renwu','meishi','zongjiao','beijing']
    print(
        '''
        软件简介:本程序主要下载4k图片,您可根据您的需求进行下载!!!
        软件作者:---喧啸
                 《下载选择目录》
        ******************************
        ** 风景 美女 游戏 动漫 影视 明星 **
        ** 汽车 动物 人物 美食 宗教 背景 **
        ******************************
        '''
    )
    choice = str(input("请输入您的下载选择(由于本人水平有限,输入时请输入对应的拼音):"))
    if choice in message_list:
        print("下载准备中,请稍后!!!")
    else:
        print("输入出错,请按照要求输入!!!")
        sys.exit()

    page_url = "http://pic.netbian.com/4k" + choice + "/"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
    }
    page = requests.get(url=page_url, headers=headers)
    page_txt = page.text

    # 数据解析 SRC属性值 ALT的值
    tree1 = etree.HTML(page_txt)
    max_page = tree1.xpath('//div[@class = "page"]/a[7]/text()')[0]
    print("温馨提示!!! "  + "您爬取的网页最大页码为",max_page)

    page = int(input("请输入最大页码:"))
    for i in range(1,page+2):
        url = page_url + "index_" + str(i) + ".html"

        response = requests.get(url = url,headers = headers)
        response.encoding = "gbk"
        page_text = response.text

        #数据解析 SRC属性值 ALT的值
        tree = etree.HTML(page_text)
        li_list = tree.xpath('//div[@class = "slist"]//li')
        if not os.path.exists('./picLibs'):
            os.mkdir('./picLibs')
        for li in li_list:
            # ./表示的是当前目录下面进行操作
            img_list = "http://pic.netbian.com" + li.xpath('./a/img/@src')[0]
            title_list = li.xpath('./a/img/@alt')[0] + ".jpg"
            #print(title_list,img_list)

            img_data = requests.get(url = img_list,headers = headers).content
            img_path = './picLibs/' + title_list
            with open(img_path,'wb') as fp:
                fp.write(img_data)
                print(title_list,"保存成功!!!")

上述代码中,我们打印输出了一个提示信息,提供了可视化的提示效果,此代码还有很多修改和完善的地方,欢迎大家关注我的公众号来交流和学习,同时我将代码也进行了打包,需要的小伙伴留言私信我哦!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值