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使用稀疏矩阵节省内存实例
Jun 27 Python
Python将xml和xsl转换为html的方法
Mar 10 Python
python使用Flask框架获取用户IP地址的方法
Mar 21 Python
Python中random模块生成随机数详解
Mar 10 Python
Python 内置函数complex详解
Oct 23 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
和孩子一起学习python之变量命名规则
May 27 Python
python对离散变量的one-hot编码方法
Jul 11 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
Django自关联实现多级联动查询实例
May 19 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
CodeIgniter中实现泛域名解析
2014/07/19 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
vue-i18n结合Element-ui的配置方法
2019/05/20 Javascript
nodejs 递归拷贝、读取目录下所有文件和目录
2019/07/18 NodeJs
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
微信小程序文章详情功能完整实例
2020/06/03 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python共享引用(多个变量引用)示例代码
2013/12/04 Python
python数据结构之二叉树的建立实例
2014/04/29 Python
Python在线运行代码助手
2016/07/15 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
python实现文本界面网络聊天室
2018/12/12 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
python梯度下降算法的实现
2020/02/24 Python
python实现飞机大战项目
2020/03/11 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
会计专业自荐信范文
2013/12/02 职场文书
综合管理员岗位职责
2015/02/11 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书