效果
先看看最终的效果:
好多可爱的章鱼喵的自拍,
选取其中的一张看看,
效果还不错,用作头像是坠吼的。
想法
图片的来源
答:可以使用搜索引擎搜索,但结果不尽人意,很多重复的,尺寸也不统一。无意中发现了这个神奇的网站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_code
if (code!=200):
print(u"无法请求页面")
else:
print(u"页面请求成功")
# html=r.content.decode('utf-8')
return r.content
def 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=0
for img in imgs:
img_find=img.find("img")
img_src=img_find["data-src"]
img_full_url=basic_url+img_src
img_name=img_find["alt"]
# print(img_name,img_full_url)
# print(img_info)
img_info={}
img_info['name']=img_name
img_info['url'] = img_full_url
list.append(img_info)
# num+=1
# print("index=",num)
# print(img)
return list
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()
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所有,请勿将其作为商业用途,如有侵权行为与本人无关。