精华内容
下载资源
问答
  • 爬虫woff字体反爬破解

    2020-10-28 18:17:33
    好久没写爬虫了,最近发现很多网站都出现了woff字体反爬。百度找了一下,发现都要钱,只好默默说一声fuck 那么,只好自己破解了。好的,那么开始。 如果你在抓去某个网站时候,抓下来的文字读不通,打开network你...

    好久没写爬虫了,最近发现很多网站都出现了woff字体反爬。百度找了一下,发现都要钱,只好默默说一声fuck
    那么,只好自己破解了。好的,那么开始。
    如果你在抓去某个网站时候,抓下来的文字读不通,打开network你发现如此:
    在这里插入图片描述
    而网页上的文字是:
    在这里插入图片描述
    那么,就是加了woff字体反爬,这时候不要慌,慢慢来。
    首先找到你要抓的网页,打开network,找到
    在这里插入图片描述
    找到woff字体文件,然后转换成xml文件,转换代码是`

    展开全文
  • woff字体反爬处理

    2021-07-22 10:15:35
    woff文件处理可视化软件xml文件结构关系静态,动态woff文件处理方法 可视化软件 woff文件一般使用fontcreator查看 链接: https://dqunying2.jb51.net/201802/tools/fontcreator_jb51.rar. xml文件结构关系 需要先将...

    可视化软件

    woff文件一般使用fontcreator查看
    链接: https://dqunying2.jb51.net/201802/tools/fontcreator_jb51.rar.

    xml文件结构关系

    需要先将woff文件转化为xml格式

    from fontTools.ttLib import TTFont
    import xmltodict
    
    
    font = TTFont('7.woff')
    # 保存为xml文件
    font.saveXML('7.xml')
    # 读取xml文件内容
    with open('7.xml', 'r') as f:
        xmldict = xmltodict.parse(f.read())
    for i in xmldict['ttFont']['glyf']['TTGlyph'][1:]:
    	# 此处i为OrderedDict 需要转换才能进行下一步取值
    	# ww = json.loads(json.dumps(i))
    	# for i in ww:
    	#	 print(i)
    	print(i)
    

    xml的字体文件格式一览,其中主要看GlyphOrder,cmap,glyf

    在这里插入图片描述
    其中GlyphOrder可映射文件id从fontcreator软件中获取该字,如下unie842为6,unie269为9,以此类推

    在这里插入图片描述

    在这里插入图片描述
    cmap则表明了映射关系,此处多半是网页呈现的代码

    在这里插入图片描述
    glyf是对字体的图像描写笔画显示

     <TTGlyph name="unia863" xMin="0" yMin="-164" xMax="996" yMax="804">
          <contour>
            #点 x.y on 0表示为弧形区域 1表示矩形
            <pt x="22" y="-72" on="1"/>
            <pt x="96" y="59" on="0"/>
            <pt x="102" y="322" on="1"/>
    

    静态,动态woff文件处理方法

    对于静态文件只需要下载到本地,获取字符集的列表顺序,再根据xml中的映射关系即可解决。

    对于动态文件有2种情况一种是uniname变化,字符集不变,这种情况需要每次请求都下载一次woff文件。

    第二种情况是2者都会变化,字符集顺序也会变化,这种情况博主的处理方式为,对`glyf`中的字符笔划x,y的值,on的排列等数据进行操作,拿到该字符唯一的特征,再去映射文件字体即可该方法适用于少量的字体反爬。

    展开全文
  • WOFF字体反爬之58同城

    2019-09-16 10:19:17
    首先,打开页面,了解到这部分信息是有字体加密的。如下图: 这部分信息包含 性别 ...经过观察发现 这里引用了woff的一个字体文件, 我们把其中的base64编码部分提取出来,保存为一个.woff的文件。 python代码示...

    相关权益问题,联系邮箱即可删除:lh1995cn@gmail.com

    首先,打开页面,了解到这部分信息是有字体加密的。如下图:
    在这里插入图片描述
    这部分信息包含 性别 年龄 学历 还有工作经验。 这部分信息需要经过转换,才能达到我们想要的数据。
    可以看到它数据加密部分,都引用了一个叫stonefont的class,我们观察一下这个class
    在这里插入图片描述
    经过观察发现 这里引用了woff的一个字体文件, 我们把其中的base64编码部分提取出来,保存为一个.woff的文件。
    python代码示例:

    # -*- coding: utf-8 -*-
    import base64
    
    font_face = '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'
    
    b = base64.b64decode(font_face)
    with open('zt01.woff', 'wb')as f:
        f.write(b)
    

    然后使用网站http://fontstore.baidu.com/static/editor/index.html 打开这个woff文件,如下图所示
    在这里插入图片描述
    可以看到每一个字都有对应的一个编码, 通过观察我们发现,这个编码后4位,跟在网页源代码中的编码是一致的。
    我们可以用fontTools这个库去解析这个woff文件

    这样我们就得到了网页中看到的编码。然后我们自己手动做个映射关系就行了。一共45个,花不了多长时间。网页中看到的前两个不算。 你以为到这里就结束了? Too Young Too Sample! 如果单纯是这样,那就太简单了。 后来观察发现(其实早就发现了[小声BB]),每刷新一次,woff对应的文件都不一样,源代码中的编码也会变化。那我们前面做的都没用了? 不是这样的。

    重点来了:

    我们任意保存两次请求网页的woff文件,然后保存为xml格式,静态分析一波。
    保存为xml的代码:

    from fontTools.ttLib import TTFont
    
    font= TTFont("zt01.woff")
    font.saveXML('zt01.xml')
    

    xml文件展示:
    在这里插入图片描述
    注意了,前方高能!
    我们在网页上打开这两个woff文件, 找到两个相同的文字,这里拿性别来举例,也就是 “男” 这个字。
    在woff 1文件中,它的编码为
    在这里插入图片描述
    在woff 2文件中, 它的编码为
    在这里插入图片描述
    我们打开这两个woff文件对应的xml文件。分别根据编码找到这个字的具体描述部分

    woff1对应的 ‘男’ :
    在这里插入图片描述
    woff 2 对应的男:
    在这里插入图片描述
    通过观察图中的pt值发现, 后一个pt标签中的x,y值 分别减去前一个pt标签的x,y值是一个固定值,就算切换woff文件,再去计算,仍满足这样的规律。 这里woff1的“男” 前两个pt的x,y值相减得到 (1786-198,1575-1575) => (1788,0). woff2的计算结果(1822-234,1611-1611)=>(1788,0)。 通过这个规律,我们就可以制作映射关系的字典啦。 用计算结果当成key,对应的汉字当作value。

    # -*- coding: utf-8 -*-
    from fontTools.ttLib import TTFont
    
    
    zt1 = TTFont("zt01.woff")
    
    # wods列表中网页上按顺序打出来
    words = ['B', '男', '王', '大', '专', 'M', '女', '吴', '硕', '赵', '黄', '李', '1', '8', '经', '2', '下', '本', '届', '5', '应', '科', '7', '中', '生', '6', 'E', '陈', '3', '以', '杨', 'A', '张', '4', '无', '0', '9', '验', '博', '技', '士', '校', '高', '刘', '周']
    
    uni_list = zt1.getGlyphNames()[1:-1]
    
    data_map = dict()
    for index, i in enumerate(uni_list):
        temp = zt1["glyf"][i].coordinates
        x1, y1 = temp[0]
        x2, y2 = temp[1]
        new = (x2-x1, y2-y1)
        data_map[new] = words[index]
    print(data_map)
    

    ok, 到这里字典制作完毕。
    后面抓取数据过程中 我们只需要 抽取抓取网页的woff文件, 计算每个以uni开头的值所对应的key值,根据key值到data_map里再取到文字。就可以制作当前抓取页面的 字体字典啦。
    **

    验证

    在这里插入图片描述
    完整代码: 传送门

    展开全文
  • woff字体反爬实战,10分钟就能学会(ttf字体同理)

    万次阅读 多人点赞 2019-08-26 23:21:07
    声明:本帖子仅是用于...经过分析,当前这种字体反爬机制是:通过获取指定链接的woff字体文件,然后根据html源码的数字 去woff字体文件里面查找真正的数字,讲到底就是一个映射关系/查找字典。如html源码是123,去w...

    声明:本帖子仅是用于学习用途,请勿与用于恶意破坏别人网站,本人不承担法律责任。

    来继续学爬虫呀!
    很开心,竟然上榜某爬虫练习网站了!!!
    来看一下榜单
    rank-1
    rank-2
    超激动的!!但是还有两道目前个人解决不了,希望哪个大佬看到了,教教我,感谢感谢!

    前言
    简单描述一下这种手段,html源码的数字跟页面展示的数字是不一致的!当时就一脸黑人问号,嗯???
    经过分析,当前这种字体反爬机制是:通过获取指定链接的woff字体文件,然后根据html源码的数字
    去woff字体文件里面查找真正的数字,讲到底就是一个映射关系/查找字典。如html源码是123,去woff文件里面
    查找出来的是:623。好了,看到这里,你一定想说:废话讲那么多干嘛?赶紧上教程啊!!
    
    那先来看一下大致流程呗:

    分析目标网站页面(在这里我不打算贴出网站地址,请大家自己找网站练习),这里看到html源码和页面展示的数字是不一致的,如下图:
    在这里插入图片描述

    tips:
    一开始不知道是怎么下手,只能谷歌搜索字体反爬,一搜果然很多说法,有说woff文件的、有说CSS的、还有说svg曲线啥的,
    然后我就去查看Network里面的All,就发现关键字眼woff,就开始猜测可能是属于这种类型的反爬手段,接着开始干活。
    
    混淆前字体:

    在这里插入图片描述

    混淆后的字体:

    在这里插入图片描述

    找了一会,发现.woff2文件和woff文件前后不一样,然后开始着手解决

    如需下载woff文件,请点击这里, 提取码: ghnx

    但是本地打不开woff字体文件,需要借助的软件是fontcreator,这个你自己去找一下,很多破解的

    在这里插入图片描述
    但是这好像看不出什么,然后我们接着需要从另外一方面下手,重点来了》将woff文件转换为xml文件
    如下:

    import os
    import requests
    from fontTools.ttLib import TTFont
    
    base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    url = "http://xxxxxx.xxx.woff"
        
    woff_dir = os.path.join(base_dir, "statics/woffs/")
    file_name = url.split("/")[-1]
    xml_name = file_name.replace(file_name.split(".")[-1], "xml")
    save_woff = os.path.join(woff_dir, file_name)
    save_xml = os.path.join(woff_dir, xml_name)
    
    resp = requests.get(url="xxx")
    with open(save_woff, "wb") as f:
        f.write(resp.content)
        f.close()
    font = TTFont(save_woff)
    font.saveXML(save_xml)  # 转换为xml文件
    

    然后打开xml文件看,先来查看一下缩略的内容,红色圈圈的那两个是本次重点破解的分析的内容:
    主要涉及内容破解版块

    然后先查看cmap,发现线索,里面注释的地方有标注了。然后我们大胆猜测:NINE对应的name=cid00018,code=0x39,这翻译过来就是9对应的name=cid00018,其id标记为0x39:
    在这里插入图片描述

    接着来看一下code=0x39,其对应的name=cid00018,然后我们拿这个cid00018去搜索,发现在部分里面看到:
    <GlyphID id="3" name="cid00018"/>,这表明什么呢?结合前后两个映射关系,然后连起来再大胆猜测一下,可能是9对应3?
    在这里插入图片描述
    为了验证这个猜想,继续再找一下其他例子,我使用已经转换为如下格式,方便你们对比,你们也可以从三张截图来对比,哪三张截图呢?分别是:①是前面包含“code=0x39,name=cid00018”的截图;②是包含“id=3,name=cid00018”的截图;③是文章的第二张截图。
    你们可以①②截图来一个个列出映射关系,建议先列出①的映射关系,再列出②的映射关系,然后再将①、②的映射关系组合起来,得出一个新的映射关系,这个新的映射关系就是我们所需的,下面来给你们看一下我提取的①、②的映射关系:

    ①的映射关系,在这里我定义为before_code_id
    ②的映射关系,在这里我定义为affter_code_id,结果如下:
    before_code_id =  {
        "0": "cid00019",
        "1": "cid00020",
        "2": "cid00017",
        "3": "cid00021",
        "4": "cid00022",
        "5": "cid00024",
        "6": "cid00026",
        "7": "cid00025",
        "8": "cid00023",
        "9": "cid00018"
    }
    affter_code_id = {
        "cid00017": 2,
        "cid00018": 3,
        "cid00019": 4,
        "cid00020": 5,
        "cid00021": 6,
        "cid00022": 7,
        "cid00023": 8,
        "cid00024": 9,
        "cid00025": 10,
        "cid00026": 11
    }
    
    然后从html源码到before_code_id, affter_code_id应用起来就是如下:
    前端数字—中间人code—最终的数字,即:
    "0"——"cid00019"——4
    "1"——"cid00020"——5
    "2"——"cid00017"——2
    "3"——"cid00021"——6
    "4"——"cid00022"——7
    "5"——"cid00024"——9
    "6"——"cid00026"——11
    "7"——"cid00025"——10
    "8"——"cid00023"——8
    "9"——"cid00018——3
    
    我们再简化一步,直接从html源码数字到最终的数字映射为如下(即直接省去中间的cidxxxxx这串):
    "0"——4
    "1"——5
    "2"——2
    "3"——6
    "4"——7
    "5"——9
    "6"——11
    "7"——10
    "8"——8
    "9"——3
    
    
    但是你们发现这映射后的数字很奇怪吗,比如"6"、"7"映射之后分别为11和10,
    但是在我们的正常逻辑之中不对呀,要不我们再列一下html源码跟前端的肉眼看到的数字的映射关系呗:
    "0"——2
    "1"——3
    "2"——0
    "3"——4
    "4"——5
    "5"——7
    "6"——9
    "7"——8
    "8"——6
    "9"——1
    哇,这列出来之后不是很相似吗,跟前面的结果,要不我再放在一起给你们好对比一下呗:
    xml提取的映射     html源码跟网页展示的,提取的映射
    "0"——4				"0"——2
    "1"——5				"1"——3
    "2"——2				"2"——0
    "3"——6				"3"——4
    "4"——7				"4"——5
    "5"——9				"5"——7
    "6"——11				"6"——9
    "7"——10				"7"——8
    "8"——8				"8"——6
    "9"——3				"9"——1
    

    到此,我们发现从xml提取的映射跟html源码跟网页展示的提取的映射数值都是相差2,所以我们大胆猜测:网页上看到的数值是可以从xml提取的映射关系里面每个数字减去2所得的,即:

    "0"——4-2=2
    "1"——5--2=3
    "2"——2-2=0
    "3"——6-2=4
    "4"——7-2=5
    "5"——9-2=7
    "6"——11-2=9
    "7"——10-2=8
    "8"——8-2=6
    "9"——3-2=1
    

    所以这就是破解了嘛,到此,这个教程总可以理解吧,写得辣么辛苦、改的辣么辛苦,赶快评论点赞收藏一套走起来

    好了,别嗨了,实操才是王道,下面来看一下核心代码,如下:

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # @Time    : 2019/8/19 13:08
    # @Author  : qizai
    # @File    : crawl_woff.py
    # @Software: PyCharm
    
    # 先安装:pip3 install fontTools
    import os
    import requests
    from fake_useragent import UserAgent
    from fontTools.ttLib import TTFont  # 对字体文件进行格式转换
    
    base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    ua = UserAgent()
    header = {
        "user-agent": ua.chrome,
    }
    
    
    def parse_woff(url=""):
        """这里是下载字体并且解析对应的值"""
        global cookie
        global header
        
        woff_dir = os.path.join(base_dir, "statics/woffs/")
        file_name = url.split("/")[-1]
        xml_name = file_name.replace(file_name.split(".")[-1], "xml")
        save_woff = os.path.join(woff_dir, file_name)
        save_xml = os.path.join(woff_dir, xml_name)
    
        if os.path.exists(save_woff):  # 存在本地的话直接提取本地的文件去解析即可省去下载,避免浪费资源
            font = TTFont(save_woff)
        else:
            resp = requests.get(url=url, cookies=cookie, headers=header)
            with open(save_woff, "wb") as f:
                f.write(resp.content)
                f.close()
            font = TTFont(save_woff)
            font.saveXML(save_xml)  # 转换为xml文件
    
        cmap = font.getBestCmap()  # 这个是xml源码里面的【数值-中间人code】映射,数值还不一定是html源码里面的数值,而是每位数经过加上一定的数值之后的
        tmp = {  # 这个是对应的才是我们需要的值,或者你也可以在每次获取的时候,将这个值对应减去48即可,就可以省去这这个映射
            48: 0,  # html源码里面的0对应xml源码里面的48
            49: 1,  # html源码里面的1对应xml源码里面的49
            50: 2,  # html源码里面的2对应xml源码里面的50
            51: 3,  # html源码里面的3对应xml源码里面的51
            52: 4,  # html源码里面的4对应xml源码里面的52
            53: 5,  # html源码里面的5对应xml源码里面的53
            54: 6,  # html源码里面的6对应xml源码里面的54
            55: 7,  # html源码里面的7对应xml源码里面的55
            56: 8,  # html源码里面的8对应xml源码里面的56
            57: 9,  # html源码里面的9对应xml源码里面的57
        }    # 注意:个人猜测以上这个tmp字典,xml源码的数字跟html源码数字的映射关系可能会定期改变的
    
        before_code_id = {}  # 转换之后before_code_id为:1:cid00019  key就是html源码数字,value就是用来查询的中间人code
        for k, v in cmap.items():
            if k not in set(range(48, 58)):
                continue
            before_code_id[tmp.get(k)] = v  # 这一步其实是将49:cid00019的映射格式转换为好理解的1:cid00019映射关系
    
        code_id_list = font.getGlyphOrder()[2:]  # 这个返回的值有11个,但是我这里只是取了第三个到最后一个,是用来取计算前端看到的真正的数值
        affter_code_id = {k:v for k,v in zip(code_id_list, range(2, 12))}  # 将每一个按照顺序映射为cid00562:2这种
    
        return before_code_id, affter_code_id
    
    
    if __name__ == '__main__':
        """使用如下"""
        before_code_id, affter_code_id = parse_woff(url="xxxx")
        
        # html源码数字:假设为0
        html_number = 0
        tmp_code = before_code_id.get(html_number)  # 先匹配中间人code
        real_number = affter_code_id.get(tmp_code) - 2  # 再提取中间人code对应的真正的数字,记得要减去2,因为本来是每位数字已经多了2
        print("当前html源码数字html_number:{} 真正的数字为real_number:{}".format(html_number, real_number))
    

    当前的woff字体反爬已经破解了,如果有不妥的地方请指出,大家一起学习。

    至此本文教程写完了,希望能够帮助到各位在爬虫路上的小伙伴们,觉得不错点个赞呗
    感谢认真读完这篇教程的您

    先别走呗,这里有可能有你需要的文章:

    CSS字体反爬实战,10分钟就能学会
    爬虫:js逆向目前遇到的知识点集合;
    woff字体反爬实战,10分钟就能学会;
    爬虫js解密分析:某某猫小说;
    爬虫js解密分析:某某云文学;
    个人总结-js逆向解析思路;

    打赏喝咖啡

    你的支持就是我的动力,感谢感谢

    展开全文
  • WOFF字体反爬之易车网

    2019-09-16 10:03:39
    该页面评价加载了WOFF字体,在审核元素中查看,发现个别汉字无法正常显示,由此可推测该WOFF文件中,只有少数常用汉字被单独编码了。 审核元素中无法正常显示的字,在源码中显示为“”格式,该格式为unicode编码...
  • 经过分析,当前这种字体反爬机制是:通过获取指定链接的woff字体文件,然后根据html源码的数字 去woff字体文件里面查找真正的数字,讲到底就是一个映射关系/查找字典。如html源码是123,去w...
  • 看图 从网页上解析下载到本地的fontfile.woff文件经fontcreator打开没问题,可以正常查看里面的信息, 然后在python中通过实例化TTFont对象操作,只要调用该对象的一些方法,如getGlyphOrder(),saveXML(),...
  • 前言:这一期,是针对起点中文网的作品详情页爬取,这是对woff反爬的入门,相对美团之类的字体反爬容易一些。短短的几十行代码,逻辑清晰!让你欲罢不能的关注我!有人就要说了,我已经会爬取小说内容,干嘛要爬它,...
  • 58同城爬虫,解决字体反爬woff

    千次阅读 2019-07-08 16:30:53
    with open("font.woff", r"wb") as f: f.write(bin_data) onlineFonts = TTFont('font.woff') self.dict = onlineFonts.getBestCmap() # 数字解决 for i in range(len(titles)): titles[i] = self.convert_...
  • 字体反爬,下载 .woff 文件

    千次阅读 2019-08-18 15:12:45
    找到源代码里面的 .woff 字体文件,下载下来,下面的代码转换为原来的映射 字体文件是二进制的 from fontTools.ttLib import TTFont def get_cmap(self,font_nums): """ 分析字体所映射的值 :param font_nums...
  • 评分加密后看不出来,这里怀疑是字体加密了,我们在源码中搜索woff, 找到网址:vfile.meituan.net/colorstone/87ecd1ab347b1c9e14b52b83a04f5a872288.woff 打开网址下载.woff文件 下载之后我么需要想办法把它打开...
  • woff转xml import os import requests from fontTools.ttLib import TTFont base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) url = '...
  • 在爬网站时候,有时会遇到类似以下代码 ...字体反爬,就是网站将一些关键字替换为网站自己的字体,这样在网页上字体会正常显示,但是当爬取下来的时候,经过字体加密的字符都是乱码的,无法查看。 应对这种反...
  • example.woff

    2019-06-05 21:15:40
    反爬机制之字体反爬详解里面涉及的字体文件example.woff
  • woff_url = re.findall(r'(//s3plus\.meituan\.net/.{,100}?woff)',text)[0] print("http:"+woff_url) content = requests.get("http:"+woff_url).content with open("target.woff","wb") as f: f.write...
  • 字体反爬,顾名思义就是利用自定义的字符编码与字体文件的映射呈现文字的一种反爬措施。...woff字体文件(example.woff): html显示效果: 解决方案: 字符编码 字体爬虫就是使用类似自定义的字符编码的形式来呈...
  • 1a3zZ6.woff

    2019-08-22 13:49:33
    本字体反爬教程woff字体文件,仅用于学习,请勿用于恶意攻击别人网站,本人不承担法律责任。
  • 反爬 与 反反爬

    千次阅读 2018-08-23 13:18:51
    了解网站的反爬机制 一般网站从以下几个方面反爬虫: 1. 通过Headers反爬虫 从用户请求的Headers反爬虫是最常见的反爬虫策略。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测...
  • 字体反爬

    千次阅读 2018-09-06 09:23:34
    1.页面看到的文字实际由另一个字经过字体库映射而得 2.网页会在加载的时候载入字体库 (可能有多个字体库...3.用python 将.woff的字体文件 转成 XML 读取其中的映射。下图为第一层映射,根据code 可以得到 name...
  • 解决猫眼字体反爬

    千次阅读 2019-02-26 23:32:44
    1.获取对应加载的字体文件(可能是对网页上的base64加密字段进行解密,也能是去获得字体文件的url,以.ttf或.woff结尾的文件) 2.用1的步骤先下载好一个字体文件并用FontCreater进行查看,按照顺序写出对应字体 3.新...
  • 大众点评字体反爬

    千次阅读 2020-05-07 17:40:24
    大众点评字体反爬加密种类1.CSS 字体映射2.WOFF 字体加密 加密种类 目前大众点评字体反爬有两种: css 字体映射(svg); woff 字体加密。 1.CSS 字体映射 商家评论页面中,商家地址、电话、用户评论都采用了 CSS ...
  • 抖音字体反爬

    2019-10-10 19:46:21
    什么是字体反爬? 所谓的字体反爬就是网站一些关键字替换成自己设计的字体,这样用浏览器访问网站的时候会加载这套字体,因此在浏览器中显示是正常的字体;而在源码中这些关键字是乱码的,根本无法识别,采集下来是...
  • 以店铺的评论页面和店铺列表页面进行研究,分别对应了css字体映射,woff字体加密的反爬虫手段。 1、店铺评论页——css字体映射(svg) 随便打开一个链接:http://www.dianping.com/shop/FU8Gnkledt9y1i4z/review_all...
  • 字体文件混淆是常见反爬手段,我这里指的是使用1份或多份网站自定义字体(通常是woff),导致爬下来的字符编码不能解析,即所见非所得。 解决思路 1、首先,不会有一个网站会真的自己设计一种字体(如果有可以手打...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 482
精华内容 192
关键字:

woff反爬