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 26 Python
Python中处理字符串之isalpha()方法的使用
May 18 Python
python字典的常用操作方法小结
May 16 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 Python
详解pandas的外部数据导入与常用方法
May 01 Python
利用Pytorch实现简单的线性回归算法
Jan 15 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
Apr 23 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 Python
Github 使用python对copilot做些简单使用测试
Apr 14 Python
python playwright之元素定位示例详解
Jul 23 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实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
javascript实现简易计算器
2017/02/01 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
php使用递归与迭代实现快速排序示例
2014/01/23 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
2019/04/01 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
pymysql模块的操作实例
2019/12/17 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
Python爬取梨视频的示例
2021/01/29 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
PHP面试题及答案一
2012/06/18 面试题
建筑毕业生自我鉴定
2013/10/18 职场文书
财务管理职业生涯规划范文
2013/12/27 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
库房保管员岗位职责
2014/04/07 职场文书
争先创优演讲稿
2014/09/15 职场文书
公司开业主持词
2015/07/02 职场文书
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL
nginx共享内存的机制详解
2022/03/21 Servers
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python
Python可视化神器pyecharts绘制水球图
2022/07/07 Python