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制作简单的钢琴程序的教程
Apr 01 Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 Python
PyQt实现界面翻转切换效果
Apr 20 Python
python操作excel的方法
Aug 16 Python
Django网络框架之HelloDjango项目创建教程
Jun 06 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
Jul 11 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
详细分析Python collections工具库
Jul 16 Python
Python编写memcached启动脚本代码实例
Aug 14 Python
pycharm 如何取消连按两下shift出现的全局搜索
Jan 15 Python
Python中OpenCV实现查找轮廓的实例
Jun 08 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
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
PHP实现微信申请退款功能
2018/10/01 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
php接口隔离原则实例分析
2019/11/11 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
jquery高效反选具体实现
2013/05/05 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
JS常见算法详解
2017/02/28 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
vue实现移动端返回顶部
2020/10/12 Javascript
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
计算机专业个人求职自荐信
2013/09/21 职场文书
营销人才自我鉴定范文
2013/12/25 职场文书
小学教师教学随笔
2015/08/14 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android