学习Python3 天眼查 爬虫

摘要:
在开始学习Python时,我不想看基础知识,而且我的记忆力很差。我记不住那些语法,所以我直接去了这个项目。这是相当深刻的。刚好公司有情况需要检查企业的信息,所以我想成为一名爬虫。那些有验证码的人不愿意这样做。这是个大问题。我选择了天眼查,跳过检查过程,直接写下结果。总结的步骤如下:首先,天眼查最大的障碍是字体问题。本网站上有介绍,大致意思是网页上显示的一些字符是由天眼查自己的字体文件处理的。

刚开始学习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%

六、得到的结果应该是这样的

学习Python3 天眼查 爬虫第1张

七、最后通过抓取的结果,然后转成对应的编码,即可得到想要的结果了

八、其它,用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)

免责声明:文章转载自《学习Python3 天眼查 爬虫》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java报表实现excel一样冻结表头的功能buildroot使用介绍【转】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

【FFMPEG】关于硬解码和软解码

一、一些命令1、显示所有可用的硬件加速器[root@tranCodeing~]#ffmpeg-hwaccelsffmpegversion4.1Copyright(c)2000-2018theFFmpegdevelopersbuiltwithgcc4.8.5(GCC)20150623(RedHat4.8.5-39)configuration:--prefix=...

WPF LiveChart 图表详解

我不喜欢看文本版。单击我观看视频。本文主要介绍LiveChart中图表的用法。WPF:数据绑定、数据显示样式等。导入LiveChart.WpfNuGet以搜索LiveChart包并安装LiveChart.WPF。引用LiveChart.WPF在使用的接口中,引用LiveChart.WPF的类库xmlns:lvc=“clr-namespace:LiveChar...

14款优秀的JavaScript调试工具大盘点

官方网站:http://www.jshint.com/4.Grunt Grunt是一个基于任务的命令行构建工具,适用于JavaScript项目。Venkman旨在为Mozilla提供一个基于浏览器的强大JavaScript调试环境。官方网站:http://www.my-debugbar.com/wiki/CompanionJS/HomePage10.Simp...

更改nexus的工作目录

默认情况下,nexus的工作目录位于${user_home}/sonatype工作目录中。在Linux中,如果用户是root用户,则使用/root/sonatype。这便于通过war将nexus安装到servlet容器中,但不利于服务器的集中管理。这需要更改默认的nexus工作目录位置。为了方便管理,您可以选择使用环境变量。...

flutter Radio单选框

单选框,允许用户从一组中选择一个选项。...