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 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
浅谈Python中带_的变量或函数命名
Dec 04 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
Nov 29 Python
Python字符串的常见操作实例小结
Apr 08 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
python logging通过json文件配置的步骤
Apr 27 Python
简单了解Django项目应用创建过程
Jul 06 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
Sep 25 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 Python
Python实现随机生成迷宫并自动寻路
Jun 13 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
图书管理程序(一)
2006/10/09 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
理解Javascript_03_javascript全局观
2010/10/11 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
简化vuex的状态管理方案的方法
2018/06/02 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
python安装Scrapy图文教程
2017/08/14 Python
Python实现的矩阵类实例
2017/08/22 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
Python实现的knn算法示例
2018/06/14 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
python实现文件的分割与合并
2019/08/29 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
Python之Sklearn使用入门教程
2021/02/19 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
实用的简历自我评价
2014/03/06 职场文书
节约用电标语
2014/06/17 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js