【Python3】抓取Github吉祥物Octocat昵图并下载到本地
效果
先看看最终的效果:
好多可爱的章鱼喵的自拍,
选取其中的一张看看,
效果还不错,用作头像是坠吼的。
想法
图片的来源
答:可以使用搜索引擎搜索,但结果不尽人意,很多重复的,尺寸也不统一。无意中发现了这个神奇的网站https://octodex.github.com
,所以就编写一个爬虫对上面的图片进行抓取。如何开展
- 请求网址:https://octodex.github.com
- 提取上面Octocat的美图
- 下载到本地。
用到的工具
- python3
- urllib.request:用于请求网页
- BeautifulSoup:用于筛选网页内容,提取图片
- 集成开发环境IDE
这里使用的是Pycharm社区版
- python3
魔法
import urllib.request
import requests
from bs4 import BeautifulSoup
import os
# 抓取网站上所有的Github吉祥物的照片并保存到本地basic_url="https://octodex.github.com"def open_url(url):# r=urllib.request.urlopen(url)r=requests.get(url)print ('start!')code=r.status_codeif (code!=200):print(u"无法请求页面")else:print(u"页面请求成功")# html=r.content.decode('utf-8')return r.contentdef get_image_list(content):list=[]bs = BeautifulSoup(content, 'html.parser')cont = bs.find('div', 'content')imgs=cont.find_all('div', 'item-shell')# print(imgs)num=0for img in imgs:img_find=img.find("img")img_src=img_find["data-src"]img_full_url=basic_url+img_srcimg_name=img_find["alt"]# print(img_name,img_full_url)# print(img_info)img_info={}img_info['name']=img_nameimg_info['url'] = img_full_urllist.append(img_info)# num+=1# print("index=",num)# print(img)return listdef download_images(img_list):basePath = os.path.join(os.getcwd(), r'octocat')#获取当前工作路径filename = os.path.join(basePath, 'octocat_img')if not os.path.exists(filename):os.makedirs(filename)os.chdir(filename)print(u'保存至目录:',filename)#下载图片for img in img_list:print(u"正在下载...",img["name"])pic=requests.get(img["url"])fp = open(img["name"]+ '.png', 'wb')#这里是图方便,全部保存为png格式fp.write(pic.content)fp.close()if __name__ =='__main__':html=open_url(basic_url)img_list=get_image_list(html)# print(img_list)download_images(img_list)# print(html)# get_image_list(html)
就是这样。
关键
在想法中的第二步,“如何提取Octocat的美图”,这时就要祭出神奇的F12
——开发者工具按键了,分析一下网页的源代码中,我们的章鱼喵在哪里:
发现喵喵的图片就藏在源代码里,而且很有规律:
这就要用到美丽汤——BeautifulSoup,来熬煮一下:
bs = BeautifulSoup(content, 'html.parser')cont = bs.find('div', 'content')imgs=cont.find_all('div', 'item-shell')
剩下的就是把网站遍历一遍,把小喵的自拍下载到我们本地:
def download_images(img_list):basePath = os.path.join(os.getcwd(), r'octocat')#获取当前工作路径filename = os.path.join(basePath, 'octocat_img')if not os.path.exists(filename):os.makedirs(filename)os.chdir(filename)print(u'保存至目录:',filename)#下载图片for img in img_list:print(u"正在下载...",img["name"])pic=requests.get(img["url"])fp = open(img["name"]+ '.png', 'wb')#这里是图方便,全部保存为png格式fp.write(pic.content)fp.close()
大功告成!
声明
Octocat形象版权为Github所有,请勿将其作为商业用途,如有侵权行为与本人无关。
【Python3】抓取Github吉祥物Octocat昵图并下载到本地相关推荐
- python获取app信息的库_基于python3抓取pinpoint应用信息入库
这篇文章主要介绍了基于python3抓取pinpoint应用信息入库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pinpoint是用Java编写 ...
- python抓取dblp网站的arXiv论文,下载保存成pdf
python抓取dblp网站的arXiv论文,下载保存成pdf 需求 需要查找一些关于强化学习决策方面的论文,懒得一个一个下载,所以用python写了个脚本,在dblp网站上爬取论文. import ...
- Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接
Python爬虫:利用JS逆向抓取携程网景点评论区图片的下载链接 1. 前言 2. 实现过程 3. 运行结果 1. 前言 文章内容可能存在版权问题,为此,小编不提供相关实现代码,只是从js逆向说一说到 ...
- 利用正则表达式爬取网络小说,并按照章节下载到本地
利用正则表达式爬取网络小说,并按照章节下载到本地 闲来无事,尝试了使用正则表达式爬取了某个明显没有反扒机制的小说网站,其实也是刚刚接触爬虫,第一次从网络上爬到感兴趣的东西还是令人开心的. 先贴为敬. ...
- python3抓取数据_python3抓取到的拉勾数据统计
趁着最近有时间写了个拉勾爬虫抓取了后端.前端和移动端技术岗位的数据,总共大约6多万条记录,对其取前十名进行统计 按地域划分: 可以看出北上广深杭的数量远远超出其它城市,机会相对较多 2. 按融资阶段来 ...
- [知识图谱实战篇] 一.数据抓取之Python3抓取JSON格式的电影实体
前面作者讲解了很多知识图谱相关的原理知识,包括知识图谱相关技术.Neo4j绘制关系图谱等,但还是缺少一个系统全面的实例.为了加深自己对知识图谱构建的认识,为后续创建贵州旅游知识图谱打下基础,作者学习了 ...
- python抓取网站88titienmae88中的“图片区”的第一页的所有图片
#-*-coding:utf-8-*- from urllib.request import urlopen, urlretrieve from bs4 import BeautifulSoup im ...
- python抓取网站88titienmae88中的“图片区”所有图片
#-*-coding:utf-8-*- from urllib.request import urlopen, urlretrieve from bs4 import BeautifulSoup im ...
- Python3抓取Bing每日图片做桌面背景,并设置为开机更新背景
该程序是我学习Python的第一个小程序,用于熟悉Python语法,其中借鉴了很多其他网友的Code,望谅解. 参考列表 主要参考博客列表如下: LittleBearLi http://blog.cs ...
最新文章
- azure多功能成像好用吗_如何使用Azure功能处理高吞吐量消息
- 用protoc-gen-lua生成PB的lua代码
- 组图:1904年圣路易斯奥运会
- 无重叠区间及用最少的箭射爆气球
- vfp赋值超过7位出错_JDK1.7下的HashMap的源码分析
- 14、使用play搭建一个web应用用例
- Java核心(五)深入理解BIO、NIO、AIO
- python3 上传文件到目标机器_通过python模块实现服务器和本地机器之间快速拷贝文件...
- C++学习笔记56:异常处理
- Scrum Master需要具备哪些能力和经验
- 智能优化算法总结-数字孪生下的车间调度-APS预告
- 腾讯云TStack与IBM LinuxONE互认证
- [转载]修改SDE权限造成无法在ArcMap中绘制图形的解决办法
- Android HID触摸屏驱动怎么开发
- 爬虫--初体验(获取二级网站)
- photoshop图片显示为索引,解决办法
- 债券价格和到期收益率的关系_债券价格、到期收益率与票面利率之间的关系是什么?...
- Matplotlib绘制三维数据点与线
- 使用html5 canvas 绘制Android机器人
- 华子笔试 TLV的匹配 java版本