![f6c6cea90a8a86076e4663a4b66f5ecc.gif](https://i-blog.csdnimg.cn/blog_migrate/36f397840ae668decd2bff426e2b77c2.gif)
小猴子的女朋友最近要求老多了,前几天发现一个宝贝网站,上面的图片真的很不错,就想把图片都保存下载。
可是她右键另存为没反应,就过来找我。
女朋友:这个网站的图片怎么都不能右键保存呢?
小猴子:怎么可能,只要是眼睛能看到的,都可以保存。
女朋友:那你帮我把这个网站上的图片都下载下来吧,都要分好类,每个文件夹一类。
小猴子:……
查看图片的源地址
右键保存,其实是前端页面禁用了鼠标的右键另存的行为而已,想找到图片的源地址很简单。在我之前的文章我也介绍过,还是F12
打开开发者调试工具,定位到图片,其中src
就是图片的源地址。
![86eecb042a50aff6c6b87b6abe5d69e2.png](https://i-blog.csdnimg.cn/blog_migrate/cb3ef27ff1f5d692a9cb9892fa558ac4.png)
批量下载图片
但是分类吧,图片那么多,类别又很多,手动操作起来真的很麻烦。还是用代码来解决吧。
我们会用到两个很有用的python库,beautifulsoup和you-get,后期再单独介绍这两个库,先把女朋友的任务完成了
分析目标网站
https://7esl.com/picture-dictionary/
每个类别都有一个目录,点击就可跳转到目标页面,目标页面上有大量该类别的图片。
![7940b10053c9880a0af5d59ca05e94f1.png](https://i-blog.csdnimg.cn/blog_migrate/c9842ca4720b7f7742b06cc39aa01332.png)
步骤一:获取网页html源码
def get_html(url):
res = requests.get(url)
return res.text
步骤二:获取下载目录及跳转链接
def get_sub_url(base_url):
html = get_html(base_url)
soup = BeautifulSoup(html, "lxml")
soup_ul = soup.find_all("ul")
pic_url_dict = {}
for ul_item in soup_ul:
if ul_item['class'][0] == "bellows-nav":
for a_item in ul_item.find_all("a"):
item_content = a_item.get_text()
item_link = a_item.get("href")
pic_url_dict[item_content] = item_link
return pic_url_dict
知识点:beautifulsoup处理html,提取目录和跳转链接
步骤三:获取图片源地址
def get_pic_url(pic_url):
html = get_html(pic_url)
soup = BeautifulSoup(html, "lxml")
pic_url_lst = []
for item in soup.find_all("img"):
item_src = item.get("src")
if item_src.startswith("https") and item_src[-4:] in (".jpg", ".png", ".bmp"):
pic_url_lst.append(item_src)
return pic_url_lst
知识点:beautifulsoup处理目标网页html,提取网页上所有图片的地址
步骤四:下载目标网页所有图片到指定目录
def dld_pic_to_dir(file_path, pic_url):
you_get_cmd = 'you-get -o "{}" "{}"'.format(file_path, pic_url)
print(you_get_cmd)
os.system(you_get_cmd)
知识点: you-get下载图片到指定目录
完整代码
50行代码搞定!!!
import os
import requests
from bs4 import BeautifulSoup
def get_html(url):
res = requests.get(url)
return res.text
def get_sub_url(base_url):
html = get_html(base_url)
soup = BeautifulSoup(html, "lxml")
soup_ul = soup.find_all("ul")
pic_url_dict = {}
for ul_item in soup_ul:
if ul_item['class'][0] == "bellows-nav":
for a_item in ul_item.find_all("a"):
item_content = a_item.get_text()
item_link = a_item.get("href")
pic_url_dict[item_content] = item_link
return pic_url_dict
def get_pic_url(pic_url):
html = get_html(pic_url)
soup = BeautifulSoup(html, "lxml")
pic_url_lst = []
for item in soup.find_all("img"):
item_src = item.get("src")
if item_src.startswith("https") and item_src[-4:] in (".jpg", ".png", ".bmp"):
pic_url_lst.append(item_src)
return pic_url_lst
def dld_pic_to_dir(file_path, pic_url):
you_get_cmd = 'you-get -o "{}" "{}"'.format(file_path, pic_url)
print(you_get_cmd)
os.system(you_get_cmd)
if __name__ == '__main__':
picture_dictionary_base_url = "https://7esl.com/picture-dictionary/"
pic_url_dict = get_sub_url(picture_dictionary_base_url)
save_path = "d:/haha"
for dir_name, sub_url in pic_url_dict.items():
print(dir_name, sub_url)
output_pic_path = os.path.join(save_path, dir_name)
if not os.path.exists(output_pic_path):
os.makedirs(output_pic_path)
for pic_src in get_pic_url(sub_url):
pic_name = pic_src.split("/")[-1]
if os.path.exists(os.path.join(output_pic_path, pic_name)):
print(pic_name, " exist")
else:
print(pic_src)
dld_pic_to_dir(output_pic_path, pic_src)
效果
![994f7898ceeebdde2c4dfbaac59dc9a7.gif](https://i-blog.csdnimg.cn/blog_migrate/479e1f9ade07543387d44605b8bd0450.gif)
猴哥带你飞,青春不迷茫~~
![f25b435a1eb9effb0e2223d2d9242989.png](https://i-blog.csdnimg.cn/blog_migrate/98169f76279b96ab40e44da59f3f4b41.png)