Python 批量下载阴阳师网站壁纸


Posted in Python onMay 19, 2021

代码复制可直接使用,记得pip install下载requests和bs4

最终版本

# 引入系统类库用于打开关闭文件
import sys
# 使用文档解析类库
from bs4 import BeautifulSoup
# 使用网络请求类库
import requests

#图片保存目录
path = 'D:/阴阳师' 
#阴阳师壁纸网站
html_doc = "https://yys.163.com/media/picture.html" 

# 请求
requests_html_doc = requests.get(html_doc).text
# 正则匹配所有href地址
regex = re.compile('.*?href="(.*?)2732x2048.jpg" rel="external nofollow" ')
urls = regex.findall(requests_html_doc)

# set集合可以防止下载的图片重复
result = set()
for i in urls:
    result.add(i)

# 计数器用于图片命名
num = 0

# 文件路径、操作模式、编码  # r''
# 打开文件录入图片
f = open(r'result.txt', 'w', encoding='utf-8')
for a in urls:
    try:
        image_data = requests.get(a).content
        image_name = '{}.jpg'.format(num)  # 给每张图片命名
        save_path = path + '/' + image_name  # 图片的保存地址
        with open(save_path, 'wb') as f:
            f.write(image_data)
            print(image_name, '=======================>下载成功!!!')
            num = num+1  # 下一张图片名字序号加一
    except:
        pass
# 关闭文件录入
f.close()
print("\r\n扫描结果已写入到result.txt文件中\r\n")

过程

借鉴代码

自己从0开始,没有头绪,而且对python掌握度不高,那先借鉴别人的代码开始,第一篇借鉴的代码如下

# 引入系统类库
import sys
# 使用文档解析类库
from bs4 import BeautifulSoup
# 使用网络请求类库
import urllib.request
path = 'D:/阴阳师'

html_doc = "https://yys.163.com/media/picture.html"
# 获取请求
req = urllib.request.Request(html_doc)
# 打开页面
webpage = urllib.request.urlopen(req)

# 读取页面内容
html = webpage.read()
# 解析成文档对象
soup = BeautifulSoup(html, 'html.parser')  # 文档对象

# 非法URL 1
invalidLink1 = '#'
# 非法URL 2
invalidLink2 = 'javascript:void(0)'
# set集合可以防止下载的图片连接重复
result = set()
# 计数器用于图片命名
num = 0
# 查找文档中所有a标签
for k in soup.find_all('a'):
    # print(k)
    # 查找href标签
    link = k.get('href')
    # 过滤没找到的
    if(link is not None):
        # 过滤非法链接
        if link == invalidLink1:
            pass
        elif link == invalidLink2:
            pass
        elif link.find("javascript:") != -1:
            pass
        else:
            result.add(link)

for a in result:
    # 文件路径、操作模式、编码  # r''
    f = open(r'result.txt', 'w', encoding='utf-8')
    # image_data = urllib.request.get(url=a).content
    image_data = requests.get(url=a).content
    image_name = '{}.jpg'.format(num)  # 给每张图片命名
    save_path = path + '/' + image_name  # 图片的保存地址
    with open(save_path, 'wb') as f:
        f.write(image_data)
        print(image_name, '=======================>下载成功!!!')
        num = num+1  # 下一张图片名字序号加一
        f.close()

print("\r\n扫描结果已写入到result.txt文件中\r\n")

思考urllib.request和requests

借鉴的代码中使用urllib.request来请求,刚开始学习看到的一些代码实例也常用urllib.request来发起请求,之后看到有的代码使用的是requests。对于我个人,主观感受requests更加便捷,少写了几行代码,于是便去查阅了解两者的区别。

BeautifulSoup

接触到了BeautifulSoup,并且在一些文章的评论中看到对BeautifulSoup的称赞,进入文档查阅了下用法,改变了我之前对python,获取文档中部分特征的元素节点的写法困难的印象。

Beautiful Soup 4.4.0 文档

优化处理

之所以要加正则匹配,因为一开始获取到的图片链接里有空字符串的现象,在下载图片的时候直接报错整个程序挂掉,而且这个借鉴代码中的invalidLink1和invalidLink2看起来属实不舒服。所以添加了正则从源头保证链接的有效性,并且在执行下载代码中,添加了try,except保证程序出错也不会挂掉。

借鉴的代码中每一次的下载,都会对要保存的目录进行打开和关闭,于是将打开关闭抽离到最外层,下载的逻辑放在里面,下载图片成功的提速果然肉眼可见~

总结

壁纸确实不戳~,希望下一个学习的脚本能更加有趣~

以上就是Python 批量下载阴阳师网站壁纸的详细内容,更多关于python 下载阴阳师网站壁纸的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python 查找文件夹下所有文件 实现代码
Jul 01 Python
python定时执行指定函数的方法
May 27 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
使用python对excle和json互相转换的示例
Oct 23 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
Django objects的查询结果转化为json的三种方式的方法
Nov 07 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
Python的Lambda函数用法详解
Sep 03 Python
python如何实现复制目录到指定目录
Feb 13 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
Jun 10 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
如何用Python提取10000份log中的产品信息
Jan 14 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 #Python
python使用pywinauto驱动微信客户端实现公众号爬虫
python基于tkinter实现gif录屏功能
Python 读写 Matlab Mat 格式数据的操作
May 19 #Python
python3 hdf5文件 遍历代码
May 19 #Python
Python基础之元组与文件知识总结
Python使用protobuf序列化和反序列化的实现
You might like
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
php 操作调试的方法
2012/07/12 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
JavaScript实现的使用键盘控制人物走动实例
2014/08/27 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
python读取html中指定元素生成excle文件示例
2014/04/03 Python
Python中实现常量(Const)功能
2015/01/28 Python
Python字符串中查找子串小技巧
2015/04/10 Python
浅谈Python基础之I/O模型
2017/05/11 Python
python使用PyCharm进行远程开发和调试
2017/11/02 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
python实现根据文件格式分类
2019/10/31 Python
python实现图片插入文字
2019/11/26 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
2020/04/08 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
乡镇信息公开实施方案
2014/03/23 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
2015年母亲节寄语
2015/03/23 职场文书
机器人总动员观后感
2015/06/09 职场文书
2019邀请函格式及范文
2019/05/20 职场文书