【问题来源】

来打算写一个的小游戏,但是图片都在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. 我们接着回到最初的图片仓库点击此处跳转到图片仓库,复制这个图片仓库的地址:

  1. 然后我们把刚刚复制的四个网址放在一起分析:

    第一个网址是所有图片在一个页面内的时候的其中一张图片的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上的图片的更多相关文章

  1. 利用Python几行代码批量生成验证码

    几行代码批量生成authCode 整体步骤: 1.创建图片 2.创建画笔 3.在图片上生成点 4.在图片上画线 5.在图片在画圆 6.在图片在写文本 7.在图片在生成指定字体的文本 代码奉上 #!/u ...

  2. 下载GitHub上的dnSpy源码

    一.方法 下载GitHub上项目的方法,目前我知道的有四种: 1.用svn软件checkout下载 2.安装git,然后git命令下载 3.直接下载项目压缩包 4.安装GitHub的客户端,然后下载项 ...

  3. 使用Android studio下载github上的工程及问题解决

    Android studio内置了github的插件,可以直接下载github上的工程,感觉好爽啊.具体怎么做呢?1.如图所示操作,如果是初次使用会提示输入用户名密码. 2.等android stud ...

  4. 将项目(代码)从GitHub上克隆(下载)到本地仓库

    要将项目从GitHub上克隆到本地,首先你得下载并安装好git for window. 下载地址:http://www.xp510.com/xiazai/Application/other/30988 ...

  5. Git学习笔记-----下载GitHub上某个分支的代码

    在GitHub上的仓库里,往往建有几个分支,如果只是想下载某个分支的代码,怎么办呢? 1.需要知道远程分支的名称,及远程分支所在的Git仓库 2.按下面指令下载 git clone -b 远程分支名称 ...

  6. 如何通过Git命令行把代码提交到github上

    1.http://www.cnblogs.com/leesf456/p/5169765.html   参考博客 背景:最近入手了mac,看见mac上的大神都是在用git命令行推代码,我很羡慕有木有,好 ...

  7. Git 将项目(代码)从GitHub上克隆(下载)到本地仓库

    要将项目从GitHub上克隆到本地,首先你得下载并安装好git for window. 配置Git: 1.安装完后,右键单击桌面空白处,选择Git Gui Here,进去之后,选择左上角的help选项 ...

  8. 不写1行代码,在Mac上体验ASP.NET 5的最简单方法

    昨天微软发布了ASP.NET 5 beta2(详见ASP.NET 5 Beta2 发布),对ASP.NET 5的好奇心又被激发了. 今天下午在Mac OS X上体验了一下ASP.NET 5,而且借助Y ...

  9. 将自己的代码托管到github上

    这几天一直在做一个爬虫的小demo,代码基本写的差不多了,想着如何把他放在一个地方,如是乎注册了一个github账号,开始了自己的git之旅. 首先是下载git,这个我就不多说啦!到处都有推荐看看廖雪 ...

随机推荐

  1. PHP中sha1()函数和md5()函数的绕过

    相信大家都知道,sha1函数和md5都是哈希编码的一种,在PHP中,这两种编码是存在绕过漏洞的. PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值 ...

  2. 域渗透-凭据传递攻击(pass the hash)完全总结

    总结下PtH具体形式(wmicexec.powershell.msf等) 0x01 PtH攻击原理 && 黄金白银票据 PtH攻击原理 wiki  https://en.wikiped ...

  3. java学习-IDEA运行java程序报错

    问题1: 解决办法:依次执行如下两步   问题2: 解决办法:如下两项版本应保持一致

  4. jmeter打印变量的三种方式

    1.使用Debug Sampler 2.使用log打印到jemter日志 3.使用System.out.println打印到cmd命令行

  5. 对比js库分枝Jquery和js获取对象的方式

    一.Jquery和JS的认识 对于这点不谈详细,但能有一个能有一个全面的印象,Jquery本质上也是JS,只不过用一句话概括就是   “write letter and do more”,写的更少,做 ...

  6. git jenkins 基本部署之git远程仓库

    1.git远程仓库如何使用? 实战一.如何将本地仓库与远程Gitee进行关联?        1.注册gitee        2.创建一个远程仓库?        3.配置使用远程仓库       ...

  7. Android SDK安装与环境变量的配置(windows系统)

    (一)下载Android SDK压缩包 解压后即可(全英文路径,以免后续出现乱码) (1)下载地址:http://tools.android-studio.org/index.php/sdk

  8. 实现Button的动态响应

    按下不同的Button实现不同的逻辑 但用同样的代码: using System.Reflection; namespace valuableBook { /// <summary> // ...

  9. 五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链

    买买买结算系统 一年一度的双十一购物狂欢节就要到了,又到剁手党们开始表演的时刻了.当我们把种草很久的商品放入购物车以后,点击"结算"按钮时,就来到了买买买必不可少的结算页面了.让我 ...

  10. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理六(二十四)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...