Python:批量把这些好看的图片保存到本地,爱了吗?

x33g5p2x  于2022-03-08 转载在 Python  
字(1.6k)|赞(0)|评价(0)|浏览(431)

我们在遨游网络世界时,看到一些中意的图片,总是忍不住流连忘返,甚至还想都保存下来,但是一张一张的保存又太麻烦了,那这时候就得用到咱们的python了。

众所周知,Python的某一项专长,就是批量下载,那我们今天就一起试试。

一、欲功善其事,必先利其器

知识点:

  • 1、系统分析目标网页
  • 2、html标签数据解析方法
  • 3、海量图片数据一键保存

软件:

  1. python 3.8
  2. pycharm 2021专业版

没有软件的小伙伴可以在官网下载,也可以在左侧扫一下领取

需要安装的模块:

  1. requests # 第三方 模块
  2. parsel # 解析数据

键盘按 win+r 输入cmd打开命令提示符窗口,输入 pip install requests 安装,两个模块安装方法是一样的。

二、本文思路

1、分析网站 (思路分析)

①确定爬取内容
数据所在地址 kanxiaojiejie 大家自己完善一下地址,包括后面代码里的。

②通过查看网页源代码分析数据内容

2、爬虫流程

发送请求 - 获取数据 - 解析数据 - 保存数据

  • 向目标网站发送网络请求 kanxiaojiejie
  • 获取数据 (网页源代码)
  • 解析数据 (提取数据) 相册详情页地址 标题
  • 向详情页发送网络请求
  • 获取数据 (网页源代码)
  • 解析数据 (提取数据图片链接)
  • 向图片链接发送请求
  • 保存数据

三、代码展示

模块导入

  1. import requests
  2. import parsel

发送请求

  1. def get_response(html_url):
  2. headers = {
  3. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
  4. }
  5. # 为什么这里要 requests.get() post() 请求会更安全...
  6. response = requests.get(url=html_url, headers=headers)
  7. return response

保存数据

  1. def save(img_url):
  2. img_data = requests.get(img_url).content
  3. img_name = img_url.split('/')[-1]
  4. print("正在下载: " + img_name)
  5. with open("img\\" + img_name, mode='wb') as f:
  6. f.write(img_data)

解析数据

获取图片url地址以及标题 提取数据

  1. def parse_1(html_data):
  2. selector = parsel.Selector(html_data)
  3. link_list = selector.css('.entry-title a::attr(href)').getall()
  4. return link_list

获取图片url地址以及标题

  1. ef parse_2(html_data):
  2. selector_1 = parsel.Selector(html_data)
  3. img_list = selector_1.css('.entry.themeform p img::attr(src)').getall()
  4. return img_list

主函数

  1. def run(url):
  2. data_html = get_response(url).text
  3. link_list = parse_1(data_html)
  4. for link in link_list:
  5. data_html_1 = get_response(link).text
  6. img_list = parse_2(data_html_1)
  7. for img in img_list:
  8. save(img)

调用主函数运行

  1. for page in range(1, 112):
  2. url = f'kanxiaojiejie/page/{page}'
  3. run(url)

运行效果我就不展示了,大家自己去试试哈~

相关文章