python脚本爬取字体文件的实现方法


Posted in Python onApril 29, 2017

前言

大家应该都有所体会,为了提高验证码的识别准确率,我们当然要首先得到足够多的测试数据。验证码下载下来容易,但是需要人脑手工识别着实让人受不了,于是我就想了个折衷的办法——自己造验证码。

为了保证多样性,首先当然需要不同的字模了,直接用类似ttf格式的字体文件即可,网上有很多ttf格式的字体包供我们下载。当然,我不会傻到手动下载解压缩,果断要写个爬虫了。

实现方法

网站一:fontsquirrel.com

这个网站的字体可以免费下载,但是有很多下载点都是外链连接到其他网站的,这部分得忽略掉。

#coding:utf-8
import urllib2,cookielib,sys,re,os,zipfile
import numpy as np
#网站登陆
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders=[('User-agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36))')]
urllib2.install_opener(opener)
#搜索可下载连接
def search(path):
 request=urllib2.Request(path)
 response=urllib2.urlopen(request)
 html=response.read()
 html=html.replace('\n',' ')#将所有的回车去掉,因为正则表达式是单行匹配。。。。。。
 urls=re.findall(r'<a href="(.*?)" rel="external nofollow" >(.*?)</a>',html)
 for i in urls:
  url,inner=i
  if not re.findall(r'Download ',inner)==[] and re.findall(r'offsite',inner)==[] and url not in items:
   items.append(url)
items=[]#保存下载地址
for i in xrange(15):
 host='http://www.fontsquirrel.com/fonts/list/find_fonts/'+str(i*50)+'?filter%5Bdownload%5D=local'
 search(host)
if not os.path.exists('ttf'):
 os.mkdir('ttf')
os.chdir('ttf')
def unzip(rawfile,outputdir):
 if zipfile.is_zipfile(rawfile):
  print 'yes'
  fz=zipfile.ZipFile(rawfile,'r')
  for files in fz.namelist():
   print(files) #打印zip归档中目录
   fz.extract(files,outputdir)#解压缩文件
 else:
  print 'no'
for i in items: 
 print i
 request=urllib2.Request('http://www.fontsquirrel.com'+i)
 response=urllib2.urlopen(request)
 html=response.read()
 name=i.split('/')[-1]+'.zip'
 f=open(name,'w')
 f.write(html)
 f.close()#文件记得关闭,否则下面unzip会出错
 unzip(name,'./')
 os.remove(name)
os.listdir(os.getcwd())
os.chdir('../')
files=os.listdir('ttf/')
for i in files:#删除无用文件
 if not (i.split('.')[-1]=='ttf' or i.split('.')[-1]=='otf'):
  if os.path.isdir(i):
   os.removedirs('ttf/'+i)
  else:
   os.remove('ttf/'+i)
print len(os.listdir('ttf/'))

搞到了2000+个字体,种类也挺多的,蛮好。

网站二:dafont.com

这个网站的字体花样比较多,下载起来也比较方便,恶心的是他的文件名的编码好像有点问题。

#coding:utf-8
import urllib2,cookielib,sys,re,os,zipfile
import shutil
import numpy as np
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders=[('User-agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36))')]
urllib2.install_opener(opener)
items=[]
def search(path):
 request=urllib2.Request(path)
 response=urllib2.urlopen(request)
 html=response.read()
 html=html.replace('\n',' ')
 urls=re.findall(r'href=\"(http://dl.dafont.com/dl/\?f=.*?)\" >',html)
 items.extend(urls)
for i in xrange(117):
 host='http://www.dafont.com/new.php?page='+str(i+1)
 search(host)
 print 'Page'+str(i+1)+'done'
 items=list(set(items))
 print len(items)
if not os.path.exists('ttf2'):
 os.mkdir('ttf2')
os.chdir('ttf2')
def unzip(rawfile,outputdir):
 if zipfile.is_zipfile(rawfile):
  print 'yes'
  fz=zipfile.ZipFile(rawfile,'r')
  for files in fz.namelist():
   print(files) #打印zip归档中目录
   fz.extract(files,outputdir)
 else:
  print 'no'
for i in items: 
 print i
 request=urllib2.Request(i)
 response=urllib2.urlopen(request)
 html=response.read()
 name=i.split('=')[-1]+'.zip'
 f=open(name,'w')
 f.write(html)
 f.close()
 unzip(name,'./')
 os.remove(name)
print os.listdir(os.getcwd())
for root ,dire,fis in os.walk('./'):#递归遍历文件夹
 for i in fis:
  if not (i.split('.')[-1]=='ttf' or i.split('.')[-1]=='otf'):
   os.remove(root+i)
   print i
for i in os.listdir('./'):
 if os.path.isdir(i):
  os.rmdir(i)
os.chdir('../')

总体操作跟之前的差不多,跑了几十分钟下了4000多的字体。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python新手经常遇到的17个错误分析
Jul 30 Python
python表格存取的方法
Mar 07 Python
Scrapy使用的基本流程与实例讲解
Oct 21 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
python实现扫描ip地址的小程序
Apr 16 Python
Anaconda 查看、创建、管理和使用python环境的方法
Dec 03 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
pytorch torchvision.ImageFolder的用法介绍
Feb 20 Python
python查看矩阵的行列号以及维数方式
May 22 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 Python
如何使用Django Admin管理后台导入CSV
Nov 06 Python
python在协程中增加任务实例操作
Feb 28 Python
Python在图片中添加文字的两种方法
Apr 29 #Python
Python实现对字符串的加密解密方法示例
Apr 29 #Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 #Python
python基于pyDes库实现des加密的方法
Apr 29 #Python
Python简单实现Base64编码和解码的方法
Apr 29 #Python
Python变量和字符串详解
Apr 29 #Python
python实现unicode转中文及转换默认编码的方法
Apr 29 #Python
You might like
两个开源的Php输出Excel文件类
2010/02/08 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
初识Node.js
2014/09/03 Javascript
javascript操作数组详解
2014/12/17 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
python实现FTP服务器服务的方法
2017/04/11 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python 输出所有大小写字母的方法
2019/01/02 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python实现手绘图效果实例分享
2020/07/22 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
创先争优活动方案
2014/02/12 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
2016银行求职自荐信
2016/01/28 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python