由于我校六年级即将毕业,领导要求做一个电子相册,把学生在校这几年的学习、生活记录下来,留作纪念,但是这些图片大部分都在美篇上,领导让都下载下来!
于是,不明真相的我,开始了“图片另存为”的操作,一阵操作后,腰酸背痛脖子胀!才发现平均每个美篇都有几十张图片,有十几个美篇!这都是重复劳动啊。。。。。怎么办!
正路由于我最近正在自学python爬虫,业界好像有句这样的话这样说 “理论上,一切重复劳动都可以程序化”
于是我就有了想法,可不可以一键下载所有图片呢?就有了下文。
搞起来import requests
import os
from lxml import etree
# 获取网页
def get_data(url):
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
}
response = requests.get(url, headers=headers)
image_msg = response.content.decode('utf-8')
return image_msg
# 解析网页
def parse_data(image_msg):
HTML = etree.HTML(image_msg)
result = html.xpath(
'//div[contains(@class,"content-container")]/div/div[contains(@class,img-box)]/img/@show-img'
)
return result
def create_path(image_msg):
base_dir = os.path.dirname(__file__)
# 文件夹名是美篇名
html = etree.HTML(image_msg)
dir_name = html.xpath('//div[contains(@class,"box")]/span[@id="title"]/text()')[0].strip()
dir_path = os.path.join(
base_dir, dir_name
)
return dir_path
def save_img(dir_path, result):
# 路径不存在,创建文件夹,并保存照片
if not os.path.exists(dir_path):
os.mkdir(dir_path)
n = 1
for image in result:
# 创建文件名
image_path = os.path.join(
dir_path, f'{n}.jpg'
)
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
}
response = requests.get(image, headers=headers)
image_msg = response.content
print(f'正在下载第{n}张图片·····')
with open(image_path, mode='wb')as f:
f.write(image_msg)
n = 1
print(f'下载完毕!!共{n - 1}张!')
def run():
while True:
print("""
************美篇下载器***************
作者:威猛小郭
版本:1.0
说明:用浏览器打开美篇,复制地址栏的一大坨网址,粘贴到黑黑的界面上,一个回车就好了!
注意:可能会报病毒,把360等等的关了就行,少年不要担心,俺不会写病毒类!哈哈
*************END**********************
""")
url = input('请输入要下载的美篇地址(输入q退出程序!):').strip()
if url.lower() == 'q':
break
try:
image_html = get_data(url)
result = parse_data(image_html)
dir_path = create_path(image_html)
save_img(dir_path, result)
except Exception:
print('看看是不是把网址输错了,重新试试吧!')
if __name__ == '__main__':
run()
额,代码写的有点烂,不过问题解决了,刚开始学,大牛不要笑话俺,俺目前的水平只能写成这样了,我再继续努力优化!其实写完以后很有成就感的,省了大量工作量!正好我的一个同事也有这需求,我就把程序打包成EXE文件,发给他了,收到了对方的大赞,此时此刻我的内心是非常幸福的。也更加坚定了我继续学下去的决心!
在工作之余学习了技术,解决了实际问题,并且还帮助了别人。或许小小的幸福就这么简单吧!我是一名喜欢编程,喜欢折腾的小学体育老师,希望通过自己的学习解决工作中的一些实际问题!让一些重复的劳动不再困扰老师的工作,前路很长,给自己加油!