第一步:打开网址,进入开发者模式,选中 Network,选择 Img 然后刷新页面,静静等待页面加载

等待页面加载完成,你可以看到这边有很多图片的资源

随便点开一个图片选择 Headers 可以看到 Request URL 也就是这张图片的资源路径


到这里我们就可以开始写第一个方法了,根据图片的资源路径下载图片到本地

# 这是一个示例 Python 脚本。# 按 Shift+F10 执行或将其替换为您的代码。
# 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。
import os
import urllib.request
from pathlib import Path# 根据图片的资源路径下载图片到本地
def download_by_url(url):# 获取当前文件名作为保存文件夹path = os.path.basename(__file__).split('.')[0]# 获取 url 中文件名称和扩展名作为保存文件名name = url.split('/')[-1]# 获取文件扩展名作为文件保存分类file_type = name.split('.')[1]path += '/' + file_type# 判断文件保存路径是否存在,不存在则创建dirs = Path(path)if not dirs.is_dir():os.makedirs(path)# 根据文件路径获取文件,如果文件不存在则创建# wb: 以二进制格式打开一个文件只用于写入file_path = path + '/' + namefile = open(file_path, 'wb')try:# 通过 url 获取资源request = urllib.request.urlopen(url)# 将图片二进制数据写入文件file.write(request.read())print('文件保存成功!')except IOError:print('获取资源失败!')# 关闭文件file.close()# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':download_by_url("https://u1.res.netease.com/pc/gw/20201014103243/img/p3/bg3_33_52a4a14.jpg")# 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助

运行程序,图片保存成功

现在我们只要有资源路径就可以下载资源,所以接下来我们需要获取网站内的所有资源路径

第二步:按 ctrl + f 打开控制台搜索,把我们之前得到的 url 粘贴进去,点击刷新,我们可以看到出来了一串数据

点开数据,我们可以看到我们需要的 url 在一个 js 的 Response 当中,打开 Headers 我们可以看到这个 js 文件的资源路径,通过 js 的资源路径我们就可以获取到 js 里面的数据

复制 Response 底下的数据到网上随便找个 json 解析工具格式化一下,可以看到里面有一大堆的 jpg 和 png,所以我们需要把这个大字符串里面的 jpg 和 png 的 url 全部给他拿出来

仔细观察这边的数据并不是 json 格式的,而且里面有多个对象,转成 json 格式的话不太方便,所以我打算把里面的 jpg 和 png 的 url 单独切割出来
这个使用到正则表达式

"http.*?"

表示获取 "http 开头 " 结尾的字符串
.*? 只匹配符合条件的最少字符

到了这里我们就可以写我们的第二个方法了,通过 js 的资源路径获取 js 里面的所有 jpg 和 png 路径

# 这是一个示例 Python 脚本。# 按 Shift+F10 执行或将其替换为您的代码。
# 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。
import os
import urllib.request
from pathlib import Path
import reimport requests# 通过 js 的资源路径获取 js 里面的所有 jpg 和 png 路径
def find_url(url):file_url_list = []try:js_data = requests.get(url)except IOError:print('获取JS数据失败!')return file_url_list# 拿到所以 http 开头的 urlhttp_url_list = re.findall('"http.*?"', js_data.text)for http_url in http_url_list:# 找到 jpg 和 png 扩展名的 urlif http_url.find('.jpg') != -1or http_url.find('.png') != -1:# http_url 字符串两头中包含了 " 号,需要截取掉file_url_list.append(http_url[1:-1])print('Js 内 URL 获取完毕...')return file_url_list# 根据图片的资源路径下载图片到本地
def download_by_url(url):# 获取当前文件名作为保存文件夹path = os.path.basename(__file__).split('.')[0]# 获取 url 中文件名称和扩展名作为保存文件名name = url.split('/')[-1]# 获取文件扩展名作为文件保存分类file_type = name.split('.')[1]path += '/' + file_type# 判断文件保存路径是否存在,不存在则创建dirs = Path(path)if not dirs.is_dir():os.makedirs(path)# 根据文件路径获取文件,如果文件不存在则创建# wb: 以二进制格式打开一个文件只用于写入file_path = path + '/' + namefile = open(file_path, 'wb')try:# 通过 url 获取资源request = urllib.request.urlopen(url)# 将图片二进制数据写入文件file.write(request.read())except IOError:print('获取资源失败!')# 关闭文件file.close()# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':for url in find_url("https://u1.res.netease.com/pc/gw/20201014103243/js/app/data_13ce3a8.js"):download_by_url(url)# 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助

程序运行,效果如下

到这里就可以通过 JS 资源下载图片了,接下来开始第三步,获取网页内全部的JS

第三步:有了第二步经验,我们很快就能找到 JS 的 url 地址来源


由此我们知道,通过网站地址获取 js 资源的方式和第二步,通过 js 获取图片资源的方式是一样的,所以我把第二步的方法进行了修改

# 这是一个示例 Python 脚本。# 按 Shift+F10 执行或将其替换为您的代码。
# 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。
import os
import urllib.request
from pathlib import Path
import reimport requests# 通过资源路径获取里面的所有URL路径
def find_url(url, file_type):file_url_list = []try:js_data = requests.get(url)except IOError:print('获取JS数据失败!')return file_url_list# 拿到所以 http 开头的 urlhttp_url_list = re.findall('"http.*?"', js_data.text)for http_url in http_url_list:# 找到 jpg 和 png 扩展名的 urlif http_url.find('.' + file_type) != -1:# http_url 字符串两头中包含了 " 号,需要截取掉file_url_list.append(http_url[1:-1])print('URL 获取完毕...')return file_url_list# 根据图片的资源路径下载图片到本地
def download_by_url(url):# 获取当前文件名作为保存文件夹path = os.path.basename(__file__).split('.')[0]# 获取 url 中文件名称和扩展名作为保存文件名name = url.split('/')[-1]# 获取文件扩展名作为文件保存分类file_type = name.split('.')[1]path += '/' + file_type# 判断文件保存路径是否存在,不存在则创建dirs = Path(path)if not dirs.is_dir():os.makedirs(path)# 根据文件路径获取文件,如果文件不存在则创建# wb: 以二进制格式打开一个文件只用于写入file_path = path + '/' + namefile = open(file_path, 'wb')try:# 通过 url 获取资源request = urllib.request.urlopen(url)# 将图片二进制数据写入文件file.write(request.read())except IOError:print('获取资源失败!')# 关闭文件file.close()# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':for js in find_url("http://u1.163.com/index.html", 'js'):for jpg in find_url(js, 'jpg'):download_by_url(jpg)for png in find_url(js, 'png'):download_by_url(png)# 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助

至此,全篇结束(本文仅作技术研究,不涉及任何商业用途)

python 学习笔记第一篇---下载网页内所有图片相关推荐

  1. python学习笔记第一篇:Python3使用wordcloud制作词云报错OSError: cannot open resource和制作出的词云图乱码问题

    wordcloud制作词云时有关字体设置参数font_path = ""使用: 1.当使用电脑中不存在的字体时,运行程序会报错OSError: cannot open resour ...

  2. Python学习笔记:爬取网页图片

    Python学习笔记:爬取网页图片 上次我们利用requests与BeautifulSoup爬取了豆瓣<下町火箭>短评,这次我们来学习爬取网页图片. 比如想爬取下面这张网页的所有图片.网址 ...

  3. 《鸟哥的Linux私房菜》个人学习笔记-第一篇

    <鸟哥的Linux私房菜>个人学习笔记-基础篇 这是一篇一个linux菜鸡自学的笔记 csdn上的各位大手子们好,本人实习生一枚最近想自己深入学习下linux,所以在社区里发博客,希望能记 ...

  4. bootloader学习笔记---第一篇以stm32为例

    目录 一.bootloader的任务 二.bootloader开发的基础知识 段的概念 重定位的概念 散列文件的概念 异常向量(待补充) 三.最简单的bootloader程序 四.使用汇编跳转 五.备 ...

  5. 1、Python学习笔记第一课:python介绍

    python学习第一课 python介绍: 1.python是一种解释性,面向对象语言. 2.特点: (1):可读性强: (2):简洁,生产效率高: (3):面向对象: (4):免费和开源: (5): ...

  6. 扇贝编程python学习笔记-基础篇5

    再也不咕咕了,请叫我多福 文章目录 第七关 1.print和return的区别 2.return 语句的"陷阱" 3.报错处理 4.学习巩固 第七关 知识点复习 学习用时:30mi ...

  7. Java 转 Python 学习笔记-基础篇

    # 列表类型 names = ['李明博', '咖喱棒']# 字典类型 person = {'name':'咖喱棒', 'age':18}# 元祖类型 nums = (1,2,3,4,)# 集合类型 ...

  8. Python的matplotlib库学习笔记第一篇

    各位大佬,小松鼠有什么不对的地方,请大家赐教. matplotlib.pyplot是绘制各类可视化图形的命令字库,相当于Matplotlib库的快捷方式 导入:import matplotlib.py ...

  9. 扇贝编程python无法退款_扇贝编程python学习笔记-基础篇1

    我要成为一个勤奋努力上进的人 第一关 学习用时:15min 随堂测验+上机作业:10min 随堂作业正确率:4/5 1.尝试执行代码 import random menu = ['粉丝', '炒饭', ...

最新文章

  1. Django restful-framework初步学习
  2. 分别用顺序表和链表实现队列
  3. 光猫直连电脑不能上网_电脑插上网线不能上网怎么办
  4. HIVE 在执行大量数据JOIN的时候,容易产生内存不足的情况
  5. Android 8.0 targetsdkversion升级到26填坑
  6. DATA URI schema(data:base64)协议常用数据格式
  7. Delphi中的时间操作技术(1)
  8. 使用Visual Studio Code调试运行在SAP云平台上处于运行状态的nodejs应用
  9. ps中将图片拖不进ps的编辑区的解决方法
  10. 数据不足,如何进行迁移学习?
  11. 熬夜都要看完的 Spring 干货!
  12. 利用计算机管理分区,win7增加磁盘分区教学 利用磁盘管理增加分区
  13. YOLO系列专题——YOLOv1实践篇
  14. 解决 IntelliJ 乱码问题
  15. 雷神开机logo更改_笔记本电脑开机LOGO太丑?大神教你来更换
  16. 电动滑板车和电动自行车最新标准CE-EN17128和EN15194区别
  17. JAVA失物招领系统毕业设计 开题报告
  18. 输出菱形(C语言,萌新向)
  19. 计算机二级考试进制转换可以用计算机嘛,2016年计算机二级考试题中有关进制转换和编码问题...
  20. 前端学习记录(三) CSS浮动、定位与居中

热门文章

  1. 【超详细】磁力计数据读取--以IST8310为例
  2. SpringBoot非官方教程 | 第二十篇: 处理表单提交
  3. 狂乱的潇洒主义者,频繁的追求自由者!
  4. 转:中国移动宽带光猫F663路由模式改桥接模式
  5. Spring Boot+Vue项目打包部署
  6. 955不加班的公司名单:955.WLB
  7. WebGL空间变换以及gl_FragCoord的运用
  8. Oracle 设置 密码可以重复使用 the password cannot be reused
  9. 【CTF资料-0x0002】PWN简易Linux堆利用入门教程by arttnba3
  10. ettercap 中间人攻击