zoukankan      html  css  js  c++  java
  • 学习Python3 天眼查 爬虫

    刚开始学习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)
  • 相关阅读:
    软工实践结对作业第二次
    团队展示
    软件工程结对作业
    软工实践第二次作业
    栈的初步学习
    课程作业四
    作业
    课程作业2
    博客汇总目录
    Mybatis-plus学习笔记,基于springboot
  • 原文地址:https://www.cnblogs.com/szyicol/p/9413919.html
Copyright © 2011-2022 走看看