刚开始学习Python,不愿意看基础,记忆不好,那些语法记不住,直接上个项目,这样比较深刻
刚好公司有个情况要查企业的信息,就想做个爬虫吧,有验证码的不愿意搞,那是个老大难问题,就选择了天眼查
过程都略了,直接写个结果吧,总结出来的步骤如下:
一、天眼查最大的障碍在于字体问题,这个网上都有介绍,大概意思就是说,在网页显示出来的某些字符,是天眼查自己的字体文件处理的。
比如汉字 坐 的utf-8的编码是 b'\\u5750' ,但在天眼查的字体文件里,这个编码对应的汉字是 万 。
这样在页面上某些地方肉眼看到的比如 2500万元,但实际通过标准编码得到的是 2500坐元。其实还有数字,也全部是打乱的。
这样爬到的结果就是后面那个了,这不是我想要的。
二、该字体文件,每天都变,没有固定的,这样想通过做个编码对应表的方法也被否决了。
三、只能一步一步来了,先把该字体文件下载下来,然后通过 fontTools 来操作字体文件,我通过转成xml文件,结合fontCreator,看了一下字体文件的结构,大概知道是怎么回事了
from fontTools.ttLib import TTFont font1 = TTFont('D:/Temp/num4.woff') font1.saveXML('D:/Temp/font4.xml')
四、把字体结构弄清楚之后,把里面所有的编码,结合该字体,生成位图。
import os import PIL.Image, PIL.ImageFont, PIL.ImageDraw image=PIL.Image ImageDraw=PIL.ImageDraw ImageFont=PIL.ImageFont text = u"坐" im = image.new("RGB", (300, 50), (255, 255, 255)) dr = ImageDraw.Draw(im) font = ImageFont.truetype(os.path.join("fonts", "d:/temp/num4.woff"), 14) dr.text((10, 5), text, font=font, fill="#000000") im.show() im.save("d:/temp/t.png")
#因为我只是学习,所以并没有写完整代码,以上代码只是用来结合字体生成图片的示例
五、把字体文件中涉及到的字按顺序生成的图片,通过OCR识别成字,这个我前面的文章就是专门有写ocr的,识别率100%
六、得到的结果应该是这样的
七、最后通过抓取的结果,然后转成对应的编码,即可得到想要的结果了
八、其它,用fonttools直接获取字体相关的数据如下代码
from fontTools.ttLib import TTFont font1 = TTFont('D:/Temp/num3.woff') cmap=font1['cmap'] cdict=cmap.getBestCmap() acs=ord('3') print (acs) print(cdict) # print(cdict[31532]) # glyf=list(font1['glyf'].keys()) # print(glyf) # bfd=glyf.index('_#58') # print(bfd)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2010-08-03 asp.net 导出excel 问题 (服务器的部署)