添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

现在越来越多的网站开始采用字体混淆,这种技术来应对爬虫。它就是采用TTF等一些字体文件替换掉了HTML里面的文本信息。并且准备了几千套字体作为爬虫的见面礼。

为什么需要将TTF转换为SVG,PNG图片?

因为当存在几千套字的时候,单纯比较文件名,unicode, 顶点信息都是无法识别的。下图就是汽车之家的例子,同样一个字‘ ’,在不同页面是有细微区别的。
在这里插入图片描述

解决这样的问题,最好的方式就是OCR,OCR的输入就是图片,而不是TTF文件。

通过matplotlib的pen方法

网上没有找到现成的方法,一些老的文章,也因为年代久远,相应的包里面不支持了。所以希望通过matplotlib原生的方式来构图。
整体思路为:TTF -> SVG PATH -> SVG

  1. 识别TTF
from fontTools.ttLib import TTFont
fontFileName = "myfont.ttf"
fontObject = TTFont(fontFileName)
glyphSet = fontObject.getGlyphSet()
  1. 从TTF提取command, 里面包含构建SVG所需的顶点(vert)、路线(path)、动作(code)
from fontTools.pens.svgPathPen import SVGPathPen
glyph = glyphSet[glyphName]
pen = SVGPathPen(None)
glyph.draw(pen)
command = pen._commands
  1. 将顶点(vert)、路线(path)、动作(code)转化为matplotlib可识别的对象
    这个步骤网上没有现成的车轮,所以我帮大家造了一个
def covertToVertsNCodes(glyph):
    convert a plyph object to verts and codes for drawing
    :param glyph:
    :return: [verts, codes]
    verts = []
    codes = []
    pen = SVGPathPen(None)
    glyph.draw(pen)
    penCommandList = pen._commands
    preX = 0.0
    preY = 0.0
    startX = 0.0
    startY = 0.0
    for command in penCommandList:
        code = getCode(command)[0]
        numList = getVert(command)
        if code == 'M':
            verts.append((numList[0], numList[1]))
            codes.append(Path.MOVETO)
            startX = numList[0]
            startY = numList[1]
            preX = numList[0]
            preY = numList[1]
        elif code == 'L':
            verts.append((numList[0], numList[1]))
            codes.append(Path.LINETO)
            preX = numList[0]
            preY = numList[1]
        elif code == 'V':
            x = preX
            y = numList[0]
            verts.append((x, y))
            codes.append(Path.LINETO)
            preX = x
            preY = y
        elif code == 'H':
            x = numList[0]
            y = preY
            verts.append((x, y))
            codes.append(Path.LINETO)
            preX = x
            preY = y
        elif code == 'Q':
            2 steps:
            line to first vert
            curve to second vert
            verts.append((numList[0], numList[1]))
            codes.append(Path.CURVE3)
            verts.append((numList[2], numList[3]))
            codes.append(Path.CURVE3)
            preX = numList[2]
            preY = numList[3]
        elif code == 'Z':
            verts.append((startX, startY))
            codes.append(Path.CLOSEPOLY)
            preX = startX
            preY = startY
        else:
            verts.append((numList[0], numList[1]))
            codes.append(Path.LINETO)
            preX = numList[0]
            preY = numList[1]
    return [verts, codes]
  1. 画图和保存
import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches
def generateGlyphPNG(glyph, savePath=None):
    args = covertToVertsNCodes(glyph)
    verts = args[0]
    codes = args[1]
    path = Path(verts, codes)
    fig = plt.figure()
    ax = fig.add_subplot(111)
    patch = patches.PathPatch(path, facecolor='black', lw=0)
    ax.add_patch(patch)
    xyLim = getXYLim(verts)
    ax.set_xlim(xyLim[0], xyLim[1])
    ax.set_ylim(xyLim[2], xyLim[3])
    plt.axis('off')
    if savePath != None:
        plt.savefig(savePath)
    plt.show()
    plt.close()

解释字体混淆爬虫机制:

https://blog.csdn.net/weixin_40904071/article/details/90415532

现在越来越多的网站开始采用字体混淆,这种技术来应对爬虫。它就是采用TTF等一些字体文件替换掉了HTML里面的文本信息。并且准备了几千套字体作为爬虫的见面礼。为什么需要将TTF转换为SVG,PNG图片?因为当存在几千套字的时候,单纯比较文件名,unicode, 顶点信息都是无法识别的。下图就是汽车之家的例子,同样一个字‘下’,在不同页面是有细微区别的。解决这样的问题,最好的方式就是OCR,O...
本想修改FontEditor代码(https://github.com/ecomfe/fonteditor)自动分割字体库导出每个字体svg文件, 结果git代码下来没安装成功: npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: no such file or directory, rename 'E:\WebSite PHP\ww...
网站地址:http://www.fontsquirrel.com/tools/webfont-generator(还可以缩小字体文件大小,强烈推荐) ttf转换成eot格式的字体软件:EOTFAST.exe,直接将ttf文件拖拽到exe文件中运行就可以了,下载地址http://download.csdn.net/detail/u010488325/6235387 载于:https://w...
Esri的ArcMap软件配图时,常用的字体符号想转换SVG格式,在web地图中使用,网上google到的好多在线转换网址,转换完都不好使,本文主要记录ttf字体符号svg图片的过程。 ArcMap 这块使用的是字体符号。 Mapnik 这块使用的是SVG图片符号。 Bridfo...
1、爬取自如网价格 ①网址:自如网点击查看,进入后点击租房,接下来就是爬取房价信息,以及其它想要提取的数据 ②分析流程:他所有的内容均在网页源代码中,不用去寻找api接口,皆大欢喜,但它的价格是css加密过的,即点击styles中的不显示红框中的内容,它的价格就会发生变化,复制它的url地址,会发现是一张雪碧图(爬取的价格图片背景像雪碧,所以叫做雪碧图),它的价格是根据像素点的变化,定位雪碧图的不同数字显示的 ③实现思路:获得图片,通过图片识别,将像素点(偏移量)根雪碧图的数字一一对应,爬取像素点(偏移量)
### 回答1: 想要将shx字体转换ttf字体,需要使用一些字体转换工具和软件。首先,在计算机上安装字体编辑软件,如FontCreator、FontForge等。然后,打开软件并导入shx字体文件。 接下来,对导入的字体文件进行一些调整和编辑,确保其在ttf格式中显示正常并无任何错误。可以调整字母间距、字符大小和形状等参数,以适应ttf格式的要求。 编辑完成后,保存字体文件,并将其导出为ttf格式。在导出时,需要选择ttf格式作为目标格式,并设置保存的文件路径。点击保存后,软件会自动将shx字体转换ttf字体,并生成相应的文件。 转换完成后,可以在计算机上查看转换后的ttf字体文件。对于常见的操作系统,如Windows、Mac OS等,双击ttf文件即可在字体预览界面中看到转换后的字体效果。如果需要在系统中使用该字体,可以将ttf文件复制到系统字体文件夹,并在应用程序中选择并使用该字体。 需要注意的是,在进行shx字体转换ttf字体时,可能会遇到一些问题,如字体格式不兼容、部分字符显示错误等。这时,可以通过编辑字体文件、调整字体参数等方法来解决问题。 总结起来,将shx字体转换ttf字体需要使用字体编辑软件,对字体文件进行编辑和调整,然后导出为ttf格式。这样就可以在计算机上使用ttf字体,并在各种应用程序中应用该字体了。 ### 回答2: 将SHX字体转换TTF字体是一个比较复杂的过程。SHX字体是由AutoCAD软件使用的专有字体格式,而TTF字体是一种常见的TrueType字体格式。要进行转换,需要使用特定的软件工具和技术。 首先,我们需要一个专业的字体转换工具,如FontForge或者TransType。这些工具可以将字体文件从一种格式转换为另一种格式。您可以通过在互联网上搜索这些工具来找到并下载它们。 安装好字体转换工具后,您需要打开SHX字体文件并将其导入转换工具中。然后,选择转换TTF格式的选项,并开始转换。这个过程可能需要一些时间,具体取决于字体文件的大小和转换工具的性能。 完成转换后,您将得到一个TTF格式的字体文件。这个文件可以在大多数计算机系统上使用。您可以将它安装到操作系统中,或者将它用于各种设计和排版软件中。 需要注意的是,在进行字体转换时,可能会遇到一些问题。例如,由于SHX字体的特殊性质,转换后的TTF字体可能不会完全保留原始字体的所有细节和特点。因此,在选择字体转换工具和进行转换之前,最好先备份原始字体文件,以防万一。 总的来说,将SHX字体转换TTF字体需要使用专业的字体转换工具,并按照相应的步骤进行操作。这样,您就可以方便地将SHX字体应用于其他软件和系统中。