Skip to content

JIMhackKING/icon-finder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

iconfinder—爬取精美图标

http://www.iconfinder.com上有很多精美的图标,但是一张一张的保存很麻烦,当然网站上也可以下载一系列的图标,不过在他自带的下载方式下载的话只能一次下载一种尺寸的图标。iconfinder这个脚本可以自动爬取指定系列、尺寸的图标,并分类保存在相应的文件夹中。

configure.py

# 要爬取的图标集
urls = [
		"https://www.iconfinder.com/iconsets/3d-printing-6",
		"https://www.iconfinder.com/iconsets/ecology-33",
		...
		]

sizes = [48,64,128,256,512]  # 可选的图片尺寸

urls指定了你要爬取的网页(图标集),对应的网页是这样的:

screenshot

sizes指定了你想要爬取的图片尺寸(有其他可选的16,20,24,32)

iconfinder.py

这个文件是爬虫的主程序

需要用到的库有:

  • requests
  • bs4

首先定义常量,用于后面的网络请求

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0",
		"referer":"https://www.iconfinder.com/",
		}

s = requests.session() # Session对象

然后就是定义一个函数,在上图中一个图标集里面有许多个图标,这个函数的目的就是获取这个网页里面所有图标的链接

def icon_links(url):
	req = s.get(url, headers=headers)
	soup = BeautifulSoup(req.text, "lxml")
	links = soup.find_all("a",{"class":"iconlink"})
	links = ["https://www.iconfinder.com"+i["href"] for i in links]  # 链接
	return links

返回的links就是这个网页里面的链接

另一个函数save_img作用是爬取不同尺寸的图标并保存在本地,该函数接受两个参数,title是这些图标集的标题,用来以title为名创建一个文件夹,我是以URL作为标题的,第二个参数link是图标集中的其中一个图标的链接。

def save_img(title, link):

	header = headers.copy()  # 复制变量headers并改变referer
	header["referer"] = link
	req = s.get(link, headers=header, timeout=10)
	soup = BeautifulSoup(req.text, "lxml")
	img_link = soup.find("img", {"id":"detail-icon-img"})["src"]  # 图片链接
	# 根据不同尺寸改变URL
	for size in sizes:
		img_size_link = img_link.split("/")
		prev_size = re.match(".+?\-(\d+)\.\w+", img_size_link[-1]).group(1)
		img_size_link[-1] = img_size_link[-1].replace(prev_size, str(size))
		link = '/'.join(img_size_link)

		im = s.get(link, headers=header, timeout=10).content

		# 保存图片
		with open(title+"/"+img_size_link[-1],'wb') as f:
			f.write(im)

主要的函数完成了,最后一步就是运行,遍历urls,然后传值进icon_links函数,之后再把返回值传进save_image函数就可以了

iconfinder网站上面大多数都是要收费的图标,设计师设计一个图标要花费很多精力和时间,我们不能随便就拿走别人的心血,该付费的我们还是要付费,不偷不抢,做个有修养的工程师

Releases

No releases published

Packages

No packages published

Languages