8行代码批量下载GitHub上的图片
【问题来源】
来打算写一个的小游戏,但是图片都在GitHub仓库中,GitHub网页版又没有批量下载图片的功能,只有单独一张一张的下载,所以自己就写了个爬虫脚本
模拟人的操作
把整个页面上需要的图片爬取下来了。
图片网址: 点击此处跳转到图片仓库
下面截图比较多,可以点击图片查看高清截图!
[整体思路]
爬虫就是模拟人在网页上的操作,只是使用代码会比较快速,毕竟人点击鼠标的速度是有限的。
所以我们就先要看一下在GitHub上怎么下载一张图片,然后使用代码自动化去一张一张的下载全部内容。
手动下载一张图片的操作就是进入图片仓库,点击一张图片名,然后点击Download按钮,操作步骤如下:
粘贴网址进入
:
点击想要下载的图片名
:
点击Download下载
:
下面我们要用代码模拟这个过程:
【图片仓库地址】
点击此处跳转到图片仓库,页面内总共有39张图片,我下面会详细介绍怎么去爬取这39张图片。
【所需工具】
chrome浏览器、pycharm
【前期准备】
1.首先第一步
是打开这个网页,整体查看一下这个网页的概况,在一个图片名称
上右键
选择元素
。这样会定位到在这个页面内,这个图片所代表的url地址
。
2.接着第二步
是通过检查
我们把这个图片的点击链接
复制下来,如下图,要选择复制HTML地址。
3.把刚刚复制的地址粘贴放在一个文本中,等下要分析这个东西。如下:
<a class=“js-navigation-open” title=“background.png” id=“9c1385517cbc8860981a2e72e3ad310f-24a041e8d54e0fff125a544ccd28616a44ecf226” href="/duanmingpy/beat-flight-game-/blob/master/images/background.png">background.png
我们把这段代码中的href
后面的地址给分离出来(这个地址是不完整的), 我们等下要给它添加前面的网址文件,还要用代码自动替换后面的图片名,这样就可以进行批量自动化下载了,不完整的url地址
如下:
“/duanmingpy/beat-flight-game-/blob/master/images/background.png”
4.我们再在页面中点击图片名
进入到该图片的详细页面
:
页面内图片链接地址:
5.点击之后会进入到下面这个界面,我们再右键
点击Download选择检查
:
6.进入检查界面如下,复制
对应这个下载按钮
的url地址:
把复制的这段代码粘贴在同一个文本中:
<a id=“raw-url” class=“btn btn-sm BtnGroup-item” href="/duanmingpy/beat-flight-game-/raw/master/images/background.png">Download
我们要其中的href
后面引号内的url
地址:
“/duanmingpy/beat-flight-game-/raw/master/images/background.png”
7.复制完之后,我们再点击一下这个url
这时候会跳转一个新的网页
,这里就称作是会把图片放大的网址吧,如下图, 我们把这个网址
复制下来:
8. 我们接着回到最初的图片仓库点击此处跳转到图片仓库,复制这个图片仓库的地址:
- 然后我们把刚刚复制的
四个网址
放在一起分析
:
第一个网址是所有图片
在一个页面内
的时候的其中一张图片的url
:
"/duanmingpy/beat-flight-game-/blob/master/images/background.png"
第二个是单独一张图片
的Download
按钮的url
:
"/duanmingpy/beat-flight-game-/raw/master/images/background.png"
第三个是点击download
对应的url
会跳转出来的url网址
:
https://raw.githubusercontent.com/duanmingpy/beat-flight-game-/master/images/background.png
第四个是图片仓库
的地址:
https://github.com/duanmingpy/beat-flight-game-/tree/master/images
现在我们先把这四个网址放在这里,其中的相似之处
想必已经明了。
[进入pycharm实验]
我们这里要用到的是python中的一个requests
库,需要使用import requests
导入,这个库可以满足我们进行对指定网址的请求(访问)操作
;
我们还需要一个re模块
,这个是python的内置正则匹配
的一个库,同样需要import re
导入使用。
紧接着我们要使用requests
库中的get
进行请求网址,get可以请求到很多内容,但是我们需要的并不多,先看例子:
首先我们在get
方法中填入图片仓库的url
,即https://github.com/duanmingpy/beat-flight-game-/tree/master/images
,然后把返回值赋值给results
, 再通过text
打印出来:
通过上图我们可以发现,我们拿到了图片仓库页面的所有源代码
,这里面就有所有的图片的url
,我们接着需要使用正则表达式
把我们需要的url
匹配出来。
这个时候我们可以回头看一下我们上面复制的url中的第一个,单独一张图片的url样式是:/duanmingpy/beat-flight-game-/blob/master/images/background.png
, 每张图片只有.png
前面的名字不同,我们可以使用这样一个正则表达式:"/duanmingpy/beat-flight-game-/blob/master/images/\w+\.png"
来匹配results.txt
中的所有图片的url
,(其中的\w+
表示的是出现至少一次字母数下划线
,用来匹配图片名称,\.
用来匹配一个.
)。
代码如下,匹配到的url
存在一个列表中:
可以看到我们成功的拿到了每个图片的url
。
然后我们测试
一下刚刚复制的四个url中的第三个("https://raw.githubusercontent.com/duanmingpy/beat-flight-game-/master/images/background.png"
),点击Download对应的url
跳出的网页的地址
,试试这个网址我们可以请求到什么:
我们可以看到,拿到的是一串bytes
,其实这个就是一个图片的编码
,我们只要把这串编码以二进制形式
存入文件,并且设置文件的后缀为png
就可以点开查看了:
我们把这个二进制串存入文件并打开查看:
存入成功,查看一下:
到这里并没有结束,翻到上面,我们仔细看一下我们在text中匹配的每个url和当前这个能够保存图片的url
(https://raw.githubusercontent.com/duanmingpy/beat-flight-game-/master/images/background.png
)有什么区别:我们可以清楚的看到,我们需要为刚才匹配的各个url添加前缀网址
,还要删除/blob
这个字段, 使用循环处理每个网址:
这时候我们看到,每个url都有了前缀并去掉了/blob
,可以用作下载图片使用了,这时候我们循环遍历这个存放处理后的url
,让它能够自动get图片并且自动存入到指定文件夹:
如上图,所有图片都已下载到d盘文件夹下,我们打开看一下:
【完成!】用到的都是一些基础的知识。 总代码还不到十行,如果有看不懂的小伙伴可以加下面的群找我讲解,大家共同交流进步!
上面我们复制的四个地址中,只用到了两个,其实在分析的时候是需要四个进行比对的,这里我已经知道了规律所以没有进行比较分析,可以通过这个方式
简单爬取一些其他网站
的图片或者文字
。
欢迎小伙伴们加入我创建的python交流群:625988679
8行代码批量下载GitHub上的图片的更多相关文章
- 利用Python几行代码批量生成验证码
几行代码批量生成authCode 整体步骤: 1.创建图片 2.创建画笔 3.在图片上生成点 4.在图片上画线 5.在图片在画圆 6.在图片在写文本 7.在图片在生成指定字体的文本 代码奉上 #!/u ...
- 下载GitHub上的dnSpy源码
一.方法 下载GitHub上项目的方法,目前我知道的有四种: 1.用svn软件checkout下载 2.安装git,然后git命令下载 3.直接下载项目压缩包 4.安装GitHub的客户端,然后下载项 ...
- 使用Android studio下载github上的工程及问题解决
Android studio内置了github的插件,可以直接下载github上的工程,感觉好爽啊.具体怎么做呢?1.如图所示操作,如果是初次使用会提示输入用户名密码. 2.等android stud ...
- 将项目(代码)从GitHub上克隆(下载)到本地仓库
要将项目从GitHub上克隆到本地,首先你得下载并安装好git for window. 下载地址:http://www.xp510.com/xiazai/Application/other/30988 ...
- Git学习笔记-----下载GitHub上某个分支的代码
在GitHub上的仓库里,往往建有几个分支,如果只是想下载某个分支的代码,怎么办呢? 1.需要知道远程分支的名称,及远程分支所在的Git仓库 2.按下面指令下载 git clone -b 远程分支名称 ...
- 如何通过Git命令行把代码提交到github上
1.http://www.cnblogs.com/leesf456/p/5169765.html 参考博客 背景:最近入手了mac,看见mac上的大神都是在用git命令行推代码,我很羡慕有木有,好 ...
- Git 将项目(代码)从GitHub上克隆(下载)到本地仓库
要将项目从GitHub上克隆到本地,首先你得下载并安装好git for window. 配置Git: 1.安装完后,右键单击桌面空白处,选择Git Gui Here,进去之后,选择左上角的help选项 ...
- 不写1行代码,在Mac上体验ASP.NET 5的最简单方法
昨天微软发布了ASP.NET 5 beta2(详见ASP.NET 5 Beta2 发布),对ASP.NET 5的好奇心又被激发了. 今天下午在Mac OS X上体验了一下ASP.NET 5,而且借助Y ...
- 将自己的代码托管到github上
这几天一直在做一个爬虫的小demo,代码基本写的差不多了,想着如何把他放在一个地方,如是乎注册了一个github账号,开始了自己的git之旅. 首先是下载git,这个我就不多说啦!到处都有推荐看看廖雪 ...
随机推荐
- 云计算之走进LINUX(一)
引言 小比特的随笔: 亲爱的博友所有随笔部分记录的是小比特的一些学习笔记,阅读性不是太强仅供有基础的博友参考,对小白来说阅读起来可能会有些吃力.当然也可以参考啦!小比特将在文章部分提供详细的内容介绍供 ...
- Java并发——线程间的等待与通知
前言: 前面讲完了一些并发编程的原理,现在我们要来学习的是线程之间的协作.通俗来说就是,当前线程在某个条件下需要等待,不需要使用太多系统资源.在某个条件下我们需要去唤醒它,分配给它一定的系统资源,让它 ...
- LeetCode_844-Backspace String Compare
输入两个字符串S和T,字符串只包含小写字母和”#“,#表示为退格键,判断操作完退格键剩下字符串是否相等例子:S = “ab#c", T = "ad # c” 返回true,剩下的字 ...
- mac上git安装与github基本使用
目录 安装git 创建ssh key.配置git 提交本地项目到GitHub 一.安装Git MAC安装Git 首先查看电脑是否安装Git,终端输入: git 1.通过homebrew安装Git 1. ...
- docker的使用之镜像命令
说明 Docker运行容器前需要本地存在对应的镜像 ,如果镜像不存在本地,Docker会从镜像仓库下载 获取镜像 通过网址可以找到目标镜像 https://hub.docker.com/explore ...
- API---注册表编程
首先来认识一下键,项,值吧: 左边有五个根键: HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USER HKEY_CURREN ...
- Python3_基础
目录 数据类型 变量 数据类型的转换 算术操作符 输入 字符串常用方法 数据类型 我们先来看看三种常见的数据类型 字符串 str 在Python中,字符串一般都用引号引起来,不管是用单引号还是双引号都 ...
- 【阿里云IoT+YF3300】7.物联网设备表达式运算
很多时候从设备采集的数据并不能直接使用,还需要进行处理一下.如果采用脚本处理,有点太复杂了,而采用表达式运算,则很方便地解决了此类问题. 一. 设备连接 运行环境搭建:Win7系统请下载相关的设备驱 ...
- 安装配置 Android Studio
概述 Android Studio 本身应该是开箱即用的,但是由于 dl.google.com 访问太慢,导致了这样那样的问题,因此我们只需要改一下 hosts 就行了 具体步骤 在Ping检测网站查 ...
- PHP Windows下使用Memcached扩展
github上发现了一个很好用的小文件,能够 模拟出php_memcached.dll的PHP memcached扩展. PHP memcached client 已知PCEL有两个memcache ...