python-字体反爬(二)

目标网站:http://glidedsky.com/level/web/crawler-font-puzzle-2

关于这个网页的详细解析可查看:https://blog.csdn.net/weixin_45926804/article/details/103892815

关于康熙字体可查看:https://blog.csdn.net/qq_40734108/article/details/105104412

直接上代码

import base64
from fontTools.ttLib import TTFont
import requests
import re

# 第一个是日常用的基本汉字,第二个是康熙字体
kx_dict = {
    '一': '⼀', '乙': '⼄', '二': '⼆', '人': '⼈', '儿': '⾒', '入': '⼊', '八': '⼋', '几': '⼏'
    , '刀': '⼑', '力': '⼒', '匕': '⼔', '十': '⼗', '卜': '⼘', '厂': '⼚', '又': '⼜', '口': '⼞'
    , '土': '⼟', '士': '⼠', '大': '⼤', '女': '⼥', '子': '⼦', '寸': '⼨', '小': '⼩', '尸': '⼫'
    , '山': '⼭', '工': '⼯', '己': '⼰', '干': '⼲', '广': '⼴', '弓': '⼸', '心': '⼼', '戈': '⼽'
    , '手': '⼿', '支': '⽀', '文': '⽂', '斗': '⽃', '斤': '⽄', '方': '⽅', '无': '⽆', '日': '⽇'
    , '曰': '⽈', '月': '⽉', '木': '⽊', '欠': '⽋', '止': '⽌', '歹': '⽍', '毋': '⽏', '比': '⽐'
    , '毛': '⽑', '氏': '⽒', '气': '⽓', '水': '⽔', '火': '⽕', '爪': '⽖', '父': '⽗', '片': '⽚'
    , '牙': '⽛', '牛': '⽜', '犬': '⽝', '玄': '⽞', '玉': '⽟', '瓜': '⽠', '瓦': '⽡', '甘': '⽢'
    , '生': '⽣', '用': '⽤', '田': '⽥', '白': '⽩', '皮': '⽪', '皿': '⽫', '目': '⽬', '矛': '⽭'
    , '矢': '⽮', '石': '⽯', '示': '⽰', '禾': '⽲', '穴': '⽳', '立': '⽴', '竹': '⽵', '米': '⽶'
    , '缶': '⽸', '网': '⽹', '羊': '⽺', '羽': '⽻', '老': '⽼', '而': '⽽', '耳': '⽿', '肉': '⾁'
    , '臣': '⾂', '自': '⾃', '至': '⾄', '舌': '⾆', '舟': '⾈', '艮': '⾉', '色': '⾊', '虫': '⾍'
    , '血': '⾎', '行': '⾏', '衣': '⾐', '角': '⾓', '言': '⾔', '谷': '⾕', '豆': '⾖', '赤': '⾚'
    , '走': '⾛', '足': '⾜', '身': '⾝', '车': '⾞', '辛': '⾟', '辰': '⾠', '邑': '⾢', '酉': '⾣'
    , '采': '⾤', '里': '⾥', '金': '⾦', '长': '⾧', '门': '⾨', '阜': '⾩', '隶': '⾪', '雨': '⾬'
    , '青': '⾭', '非': '⾮', '面': '⾯', '革': '⾰', '韭': '⾲', '音': '⾳', '页': '⾴', '风': '⾵'
    , '飞': '⾶', '食': '⾷', '首': '⾸', '香': '⾹', '马': '⾺', '骨': '⾻', '高': '⾼', '鬼': '⿁'
    , '鱼': '⿂', '鸟': '⿃', '卤': '⿄', '鹿': '⿅', '麻': '⿇', '黍': '⿉', '黑': '⿊', '鼎': '⿍'
    , '鼓': '⿎', '鼠': '⿏', '鼻': '⿐', '齿': '⿒', '龙': '⿓', '夕': '⼣'}




def spider(i):
    url = f"http://glidedsky.com/level/web/crawler-font-puzzle-2?page={i}"
    headers = {
        'Cookie': '_ga=GA1.2.1509539893.1587014930; Hm_lvt_020fbaad6104bcddd1db12d6b78812f6=1587014930,1587108479; _gid=GA1.2.1660844838.1587200384; footprints=eyJpdiI6InhiY0dWRVQ0dFM2XC9QYjZsTDZNOG5RPT0iLCJ2YWx1ZSI6IlBLNjUyZmFwU2pnaFBXekJySllONkx4alhrV2xJSDNiajV3N29oR0xwdXlmeDlzK1R4S1wvdHZ5UGliRGk4RjZwIiwibWFjIjoiZmFmMmQ3NTU1MzhmYmJkODkyZmM2NTRlNjRkMmViM2VhZGMxYWUzYjYwNjJlZWQzYjViMTA3MjVlNDYxYjJiMiJ9; remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d=eyJpdiI6IlI1TUZsQ0NSVkpxYWZTeWhZSXVYeUE9PSIsInZhbHVlIjoiMWs5S0p3NUhic0UxdjU3OHdXVkR5NVwvMXFDZ3NUTmdrQ0E5TzE5N2MzamR0a1pLVzBJVXU0cmVUVHRLbFJFOFwvV1NuYnpEQVBQVnVLS2ZtOHo5RlwvdmlFWmd2UXF5TFE0MVMzV0FkckVRbmUxVlNDek1NK3cwRjkyWjRUejlPRlk3S0VoNHJycG5yRWNjRTBiTHRQZjk3RUFkZkxvSWFSZTFLQjBpVmRjU2RZPSIsIm1hYyI6ImNlZDUxYWJhNmVhODY1MzllYWNiYjQyOWUxOWE1OTk2NGY3NjdkMjFkOTc4NjBlZWZlNmFmMDAwZDg2MTJmNTgifQ%3D%3D; XSRF-TOKEN=eyJpdiI6InpuMFFUZmY1RHhrYlwva24rTUdYQmR3PT0iLCJ2YWx1ZSI6InpaSDRWUTk1MFVQeG1Mc1FydllzRkVaQ0tURTBaWktIcWVDcmZMWGZXRUt1NVBtRlFrUmhvS2w1Y1NPSlRwUUQiLCJtYWMiOiI4NzNkMjA0MDBlMGUzNTljZWViYWQ4MWIxOTc1ZTc0MTVhZjFjMzdiNjhkZjA1NGQ5NmRjN2NmYWI3YzVmMjYyIn0%3D; glidedsky_session=eyJpdiI6ImVESlVHR3ZkMktkZ0NncTcyVzZraUE9PSIsInZhbHVlIjoiRXZqV0lcL3pBdjAwOGJnYkt3d3hUbXJBcnVZMFZqTWh2S0ExQ1NzZ1RjREtsd3cxd0cwSTgzZG95VGw1MzRtMjgiLCJtYWMiOiIyYzE1MTAxOWE3MjMxMDdkNDdlNzg0NzEyNWQyNDY3ZWI0MzdhMjYyN2RlZTNjODcyZTFkNjRjYjM0ZmVjMWFhIn0%3D; _gat_gtag_UA_75859356_3=1; Hm_lpvt_020fbaad6104bcddd1db12d6b78812f6=1587291491'

    }
    resp = requests.get(url,headers=headers).text
    # 得到加密的字符串
    encrypted = re.search(r'\(data:font;charset=utf-8;base64,(.*?)\) format',resp,re.S).group(1)
    # 进行解码
    data = base64.b64decode(encrypted)
    with open('gs-2.ttf','wb') as f:
        f.write(data)
    # 解析字体库
    fonts = TTFont('gs-2.ttf')
    # fonts.saveXML('gs-2.xml')
    # 得到编码
    uni_list = fonts.getGlyphOrder()[1:]
    # print(uni_list)       # ['uni67B7', 'uni7BC6', 'uni68DA', .....]
    utf_list = [eval(r"'\u" + x[3:] + "'") for x in uni_list]  # 转换格式
    # print(utf_list)       # ['枷', '篆', '棚', '堂',....]
    num_list = ['0','1','2','3','4','5','6','7','8','9']*10
    utf_dict = {u:n for u,n in zip(utf_list,num_list)}
    # print(utf_dict)       # {'枷': '0', '篆': '1', '棚': '2',.....}
    base_chinese = re.findall(r'<div class="col-md-1">.*?(\S+).*?</div>',resp,re.S)
    # print(base_chinese)   # ['棚棠筑', '堂枷垂', '篆堂枷',....]
    sum1 = 0
    for i in base_chinese:
        rel_num = ''
        for j in i:         # '棚棠筑'...
            if utf_dict.get(j) == None:
                if kx_dict.get(j) == None:
                    print(j)
                    raise Exception("kx_dict里没有这个字!!!")
                j = kx_dict.get(j)  # 变为康熙字体
            if  utf_dict.get(j) != None:
                rel_num += utf_dict.get(j)
        sum1 += int(rel_num)
    return sum1


if __name__ == '__main__':
    sums = 0
    for i in range(1,1001):
        sum1 = spider(i)
        sums += sum1
        print(i,sums)

运行时也出过报错,因为收录的kx_dict里没有民虎臼等字,问题有待解决,,,,,,,,没空解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值