美文网首页Python学习资料整理
70 行 python 代码实现壁纸批量下载

70 行 python 代码实现壁纸批量下载

作者: 9ba4bd5525b9 | 来源:发表于2019-04-10 15:22 被阅读15次

    前言

    好久没有写文章了,因为最近都在适应新的岗位,以及利用闲暇时间学习python。这篇文章是最近的一个python学习阶段性总结,开发了一个爬虫批量下载某壁纸网站的高清壁纸。

    注意:本文所属项目仅用于python学习,严禁作为其他用途使用!

    初始化项目

    项目使用了virtualenv来创建一个虚拟环境,避免污染全局。使用pip3直接下载即可:

    pip3 install virtualenv

    然后在合适的地方新建一个wallpaper-downloader目录,使用virtualenv创建名为venv的虚拟环境:

    virtualenv venv

    . venv/bin/activate

    接下来创建依赖目录:

    echobs4 lxml requests > requirements.txt

    最后yun下载安装依赖即可:

    pip3 install -r requirements.txt

    分析爬虫工作步骤

    为了简单起见,我们直接进入分类为“aero”的壁纸列表页:wallpaperswide.com/aero-deskto…

    访问页面

    新建一个download.py文件,然后引入两个库:

    接下来,编写一个专门用于访问url,然后返回页面html的函数:

    为了防止被网站反爬机制击中,所以我们需要通过在header添加UA把爬虫伪装成正常的浏览器,然后指定utf-8编码,最后返回字符串格式的html。

    提取链接

    在获取了页面的html以后,就需要提取这个页面壁纸列表所对应的url了:

    这个函数会把列表页所有壁纸详情的url给提取出来。

    下载壁纸

    有了详情页的地址以后,我们就可以进去挑选合适的size了。在对页面的dom结构分析后可以知道,每一个size都对应着一个链接:

    所以第一步,就是把这些size对应的链接提取出来:

    size_list就是这些链接的一个集合。为了方便接下来选出最高清(体积最大)的壁纸,在size中我使用了eval方法,直接把这里的5120x3200给计算出来,作为size的值。

    获取了所有的集合之后,就可以使用max()方法选出最高清的一项出来了:

    biggest_one = max(size_list, key = lambda item: item['size'])

    这个biggest_one当中的url就是对应size的下载链接,接下来只需要通过requests库把链接的资源下载下来即可:

    注意,首先你需要在根目录下创建一个wallpapers目录,否则运行时会报错。

    整理一下,完整的download_wallpaper函数长这样:

    批量运行

    上述的步骤仅仅能够下载第一个壁纸列表页第一张壁纸。如果我们想下载多个列表页全部壁纸,我们就需要循环调用这些方法。首先我们定义几个常量:

    这里通过获取命令行参数,指定了三个常量category, page_start和page_end,分别对应着壁纸分类,起始页页码,终止页页码。

    为了方便起见,再定义两个url相关的常量:

    PAGE_DOMAIN = 'http://wallpaperswide.com'

    PAGE_URL = 'http://wallpaperswide.com/' + category + '-desktop-wallpapers/page/'

    接下来就可以愉快地进行批量操作了,在此之前我们来定义一个start()启动函数:

    然后把之前的download_wallpaper函数再改写一下:

    最后指定一下启动规则:

    if __name__ == '__main__':

        start()

    运行项目

    在命令行输入如下代码开始测试:

    python3 download.py aero 1 2

    然后可以看到下列输出:

    拿charles抓一下包,可以看到脚本正在平稳地运行中:

    此时,下载脚本已经开发完毕,终于不用担心壁纸荒啦!

    相关文章

      网友评论

        本文标题:70 行 python 代码实现壁纸批量下载

        本文链接:https://www.haomeiwen.com/subject/ivoniqtx.html