剛開始學習Python,不肯意看基礎,記憶很差,那些語法記不住,直接上個項目,這樣比較深入學習
恰好公司有個狀況要查企業的信息,就想作個爬蟲吧,有驗證碼的不肯意搞,那是個老大難問題,就選擇了天眼查字體
過程都略了,直接寫個結果吧,總結出來的步驟以下:編碼
1、天眼查最大的障礙在於字體問題,這個網上都有介紹,大概意思就是說,在網頁顯示出來的某些字符,是天眼查本身的字體文件處理的。spa
好比漢字 坐 的utf-8的編碼是 b'\\u5750' ,但在天眼查的字體文件裏,這個編碼對應的漢字是 萬 。code
這樣在頁面上某些地方肉眼看到的好比 2500萬元,但實際經過標準編碼獲得的是 2500坐元。其實還有數字,也所有是打亂的。xml
這樣爬到的結果就是後面那個了,這不是我想要的。blog
2、該字體文件,天天都變,沒有固定的,這樣想經過作個編碼對應表的方法也被否決了。圖片
3、只能一步一步來了,先把該字體文件下載下來,而後經過 fontTools 來操做字體文件,我經過轉成xml文件,結合fontCreator,看了一下字體文件的結構,大概知道是怎麼回事了utf-8
from fontTools.ttLib import TTFont font1 = TTFont('D:/Temp/num4.woff') font1.saveXML('D:/Temp/font4.xml')
4、把字體結構弄清楚以後,把裏面全部的編碼,結合該字體,生成位圖。get
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")
#由於我只是學習,因此並無寫完整代碼,以上代碼只是用來結合字體生成圖片的示例
5、把字體文件中涉及到的字按順序生成的圖片,經過OCR識別成字,這個我前面的文章就是專門有寫ocr的,識別率100%
6、獲得的結果應該是這樣的
7、最後經過抓取的結果,而後轉成對應的編碼,便可獲得想要的結果了
8、其它,用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)