剛開始學習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)