目标

下载收集中国全国范围内各大高校的校徽,并批量制作比赛名牌。

背景

我们学校承办了ICPC济南站,给我分配的任务是给每家学校做一个类似于下图的带校徽的海报。

其中中间的校徽要替换成别的学校的。参赛名单上有两三百个学校,挨个手工下载校徽再手工合成不如直接找印务公司。所以开始思考这个任务可以分解成两步:

  • 根据队伍名单批量收集所需大学的校徽
  • 将校徽批量嵌入到海报中去

批量收集校徽

第一想法是找找有没有现成的API,搜了一圈后无果。

第二想法是找个有资源的网站批量爬取。又想到很多学校举办大型竞赛的时候都应该遇到这个问题,应该有与我同样想法的程序员干过同样的事儿。遂直接到github上搜索。运气很好的看到了下面这个项目:

dashjay/UniversityBadge: 中国大部分大学校徽,来自百度百科

不过拿这个项目直接爬下来的校徽太小了,我稍微改了改代码让下载下来的校徽变得高清了一点

# -*- coding: UTF-8 -*-
import os
import json
import requests
import re
from bs4 import BeautifulSoup
from urllib import request# ---------------获取大学信息,将对应大学url储存在Urllist中-----------------------------------Urllist = []
f = open("university_name.csv", "r")
line = f.readline()
while line:Urllist.append("https://baike.baidu.com/item/"+line.strip())line = f.readline()# ---------------------------------------------------------------------------------------
# ---------------------Badge Spider------------------------------------------------------
# 无法直接请求的url = 41heads = [{'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'},{'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11'},{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'}]
UCurl = []# img格式选择函数def getImgUrl(a=[], b=[]):if(a == []):return belse:return afolder = os.path.exists("Badges")
if not folder:os.makedirs("Badges")
for url in Urllist:num = 0response = requests.get(url, allow_redirects=False,headers=heads[num % len(heads)])# 判断请求的 url 是否有效if response.status_code == 200:response.encoding = ('utf-8')  # 将请求到的页面转码html = response.text  # 请求的 url 的 html 代码soup = BeautifulSoup(html, 'html.parser')  # 用html.parser对网页解析img2 = soup.select('body > div.body-wrapper.feature.feature_small.collegeSmall > div.feature_poster > div > div.poster-right > div > a > img')# 选择校徽图片的位置,得到校徽块相关信息img1 = soup.select('body > div.body-wrapper > div.content-wrapper > div > div.side-content > div.summary-pic > a > img')# 由于百度百科的 badge 图片的html格式有所不同,但基本为这两个格式,所以添加两个img格式img = getImgUrl(img1, img2)if img == []:with open('unfinishedURL.txt', 'a') as fo:fo.writelines(url)fo.writelines('\n')continueimg_url = img[0].get_attribute_list('src')[0]  # 获取校徽图片地址img_url = re.match('https[\S]+process=image', img_url).group() # 去除修饰后缀,获取原始清晰度图片if img_url == None:# 理应永远执行不到这里print('error : ' + url)exit()# 将获得的校徽图片保存本地pic = requests.get(img_url)path = 'Badges/'+url[29:]+'.jpg'with open(path, 'wb') as fp:fp.write(pic.content)# url 地址请求失败时,将失败的URL存入 unfinishedURL 文本中else:with open('unfinishedURL.txt', 'a') as fo:fo.writelines(url)fo.writelines('\n')num = num + 1print(url)print("OK!Well Done!")

下载下来的校徽还不能直接用,大概有5%的会有百度百科的水印。因为个数少,人工挨个改改就行。还有极少数图片带有非白色的边框,也得挨个改改。

批量合成图片

我拿到的图片是这样的空白图。主要思路就行把别的校徽按比例缩放到和右侧校徽同等高度后,居中放置。不按宽度缩放是因为部分学校的校徽是长方形的。

这部分工作主要借助PIL库实现,代码很简单。

import csv
from PIL import Imagewith open('university_name.csv') as f:reader = csv.reader(f)for row in reader:base_img = Image.open('blank.jpg')tmp_img = Image.open('Badges\\' + str(row[0]) + '.jpg')tmp_img = tmp_img.convert("RGB")region = tmp_img# 标准情况下中间校徽的尺寸tbox = (1395,525, 2110,1245)# 计算缩放后的宽高height = tbox[3] - tbox[1]width = tmp_img.width*(height/tmp_img.height)mid = (tbox[0]+tbox[2])/2 # 中轴线box = (int(mid - width/2) , tbox[1], int(mid + width/2) , int(tbox[1]+height) )region = region.resize((box[2] - box[0], box[3] - box[1]))base_img.paste(region, box)base_img.save('out\\' + str(row[0]) + '.jpg')print(str(row[0]))

后记

比较悲催的是打印店告知我做的图太小了,作为1米多的海报打出来太糊了。所以我把标题从批量制作海报改成了批量制作队牌了。
再见,我去学怎样用PS了。

爬取全国大学校徽合集批量制作队牌相关推荐

  1. Python爬取全国大学排名 用pyecharts进行大屏可视化

    爬取全国大学排名 用pyecharts进行可视化 院校网址:http://college.gaokao.com/schlist/p F12 先找到对应的全部list 需要先安装requests,lxm ...

  2. Python爬虫实战之 爬取全国理工类大学数量+数据可视化

    上次爬取高考分数线这部分收了个尾,今天咱们来全面爬取全国各省有多少所理工类大学,并简单实现一个数据可视化.话不多说,咱们开始吧. 第一步,拿到url地址 第二步,获取高校数据 第三步,地图可视化 第四 ...

  3. 批量爬取中国大学MOOC网站的媒体资源

    质量声明:原创文章,内容质量问题请评论吐槽.如对您产生干扰,可私信删除. 主要参考:https://github.com/Dayunxi/getMOOCmedia 三点说明: 感谢 中国大学MOOC ...

  4. python爬取中国大学_Python 3爬取全国高校基本信息

    最近接了一个单子,是爬取全国高校的基本信息,高校名字,高校层次,高校地区,招生办电话,招生办官网~ 镇楼图如下: 信息源网址是:https://gkcx.eol.cn/ 开发环境:python3.6( ...

  5. Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称

    Python爬虫学习第三章-4.3-使用xpath解析爬取全国城市名称   这一节主要是使用xpath解析爬取全国城市名称 这里使用的网址是:空气质量历史数据查询   这一个案例体现的点主要是xpat ...

  6. 使用Python爬取“最好大学网”软科中国最好大学排名2019并做可视化分析

    使用Python爬取"最好大学网"软科中国最好大学排名2019并做可视化分析 简介 开发环境 爬取数据 1.获取网站页面 2.解析网页内容 3.存储数据 可视化分析 基本设置 显示 ...

  7. 用python爬取考研信息网_【高考、考研党的福利】使用Python爬取全国高校及GIS/RS专业信息【附代码和Excel】...

    题外话:前一段时间翻译了一部关于GIS的纪录片,然后发了一篇文章,没想到有这么多人感兴趣,为了让广大GISER知道有这部神片,遂想投稿至GIS相关的专栏,不曾想居然还没人开设,真是"绕树三匝 ...

  8. python酒店评论分析_手把手用Python网络爬虫带你爬取全国著名高校附近酒店评论...

    点击蓝色"Python空间"关注我丫 加个"星标",每天一起快乐的学习 今 日 鸡 汤 我站在鼓楼下边,一切繁华与我无关. /1 前言/ 简介:本文介绍如何用p ...

  9. python爬取全国天气数据

    可以实现爬取全国的天气数据,存储为csv文件 数据来源为http://m.tianqi.com 需要requests, bs4, pandas, lxml库 对应的安装命令 pip install r ...

最新文章

  1. 鱼佬:我的数据挖掘之路!
  2. IBM已“弃疗”,AI医疗研发10年不赚钱,终于打算卖了
  3. 灵动MM32 MCU助力全国大学生智能汽车竞赛
  4. 卜晓军:IBM的大数据战略全面升级
  5. centos查看端口命令
  6. JVM系列之:对象的锁状态和同步
  7. 老赖名下无财产,可以执行老赖子女名下的财产吗?
  8. centos 8 kubernetes安装详解_8方面图文详解,电气安装工程施工工艺!
  9. Python迭代文件对象
  10. 简单理解下内存的几大区域
  11. mondrain配置mysql_Mondrian + JPivot 环境配置
  12. Android APK的加密
  13. 网易2020校招数据分析方向正式批笔试题 解析
  14. 滴答清单微信登录界面丢失
  15. ubuntu 16.04.7通过get-pip.py安装pip 20.3.4
  16. mysql 合计 小计_用SQL实现统计报表中的小计与合计的方法详解
  17. matlab如何就导数,Matlab微分和导数
  18. STM32低功耗模式
  19. JNLP说明(good)
  20. 【案例】“1GB1年1毛钱“——使用 Backup exec 基于阿里云OSS 实现企业数据异地备份 【服务器管理】【云备份】

热门文章

  1. 百分点刘钰:打破618狂欢的泡沫
  2. 《操作系统》-吸烟者问题
  3. 鸿蒙系统有哪些型号可以尝鲜,支持数十款机型!鸿蒙系统尝鲜计划出炉,荣耀用户要失望了...
  4. Word加载EndNote插件
  5. 汇编语言的应用(用途)
  6. 言语理解-片段阅读的结构剖析练习
  7. 中国企业级HTML5产业联盟成立 巨头联手共建新移动生态
  8. Image.FromStream与Image.FromFile使用区别
  9. 计算机病毒辽师大教案,四年级下信息技术教案计算机病毒知识二辽师大版.docx...
  10. LOCAL_PRIVILEGED_MODULE 详解(2)