【Python3】抓取Github吉祥物Octocat昵图并下载到本地

效果

先看看最终的效果:
好多可爱的章鱼喵的自拍,

选取其中的一张看看,

效果还不错,用作头像是坠吼的。

想法

  1. 图片的来源
    答:可以使用搜索引擎搜索,但结果不尽人意,很多重复的,尺寸也不统一。无意中发现了这个神奇的网站https://octodex.github.com,所以就编写一个爬虫对上面的图片进行抓取。

  2. 如何开展

    1. 请求网址:https://octodex.github.com
    2. 提取上面Octocat的美图
    3. 下载到本地。
  3. 用到的工具

    1. python3
      • urllib.request:用于请求网页
      • BeautifulSoup:用于筛选网页内容,提取图片
    2. 集成开发环境IDE
      这里使用的是Pycharm社区版

魔法

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所有,请勿将其作为商业用途,如有侵权行为与本人无关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值