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 相关文章推荐
10款最好的Web开发的 Python 框架
Mar 18 Python
Python的标准模块包json详解
Mar 13 Python
利用django如何解析用户上传的excel文件
Jul 24 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
pyqt5 实现工具栏文字图片同时显示
Jun 13 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
python 导入数据及作图的实现
Dec 03 Python
Django 限制访问频率的思路详解
Dec 24 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
用Python爬虫破解滑动验证码的案例解析
May 06 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 Python
python全面解析接口返回数据
Feb 12 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
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
javascript prototype,executing,context,closure
2008/12/24 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
React组件中的this的具体使用
2018/02/28 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
2018/08/22 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
在Python中处理列表之reverse()方法的使用教程
2015/05/21 Python
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
python构建深度神经网络(续)
2018/03/10 Python
python标记语句块使用方法总结
2019/08/05 Python
python常用运维脚本实例小结
2020/02/14 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
html5录音功能实战示例
2019/03/25 HTML / CSS
木工主管岗位职责
2013/12/08 职场文书
工厂总经理岗位职责
2014/02/07 职场文书
市委常委班子党的群众路线教育实践活动整改措施
2014/10/02 职场文书
会议室管理制度范本
2015/08/06 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android