专栏首页算法与数据之美字体反爬之实习僧

字体反爬之实习僧

炎热的暑假过后,就是新一轮的春招了,甚至很多公司都已经开始了提前批招聘。在正式进入职场之前,找一份实习来提升自己对工作,对岗位的熟悉程度也是非常有必要的。今天我们就来爬取一下实习僧的岗位招聘数据吧!

网页分析

我们进入实习僧官网,输入“算法”,即搜寻算法相关岗位,观察发现,该网站也采用了字体反爬,“实习生”的“生”字在源代码中显示为小方框。

我们注意到右边有展示出所用的字体形式:myFont。接着我们可以在网页源代码中搜索myFont,果然让我们找到了字体文件。

把这个url与实习僧官网进行拼接,我们便可以将实习僧的字体文件下载到本地。通过fontTools库将字体文件以xml的形式展示出来。该文件会以一定频率更新,我们再次抓取字体文件也以xml的形式展示。发现其name完全相同,通过FontCreator发现它们所表示的字体也完全相同,那么究竟是哪里不同呢?

仔细观察xml,我们发现它们的字体编码不同。而其uniname是字符对应的unicode编码,如网页源代码中的“机器学习实习&#xe73a”,对应于uni751F,对应“生”字。只要能将字体的编码在源代码中替换成对应字体,我们就可以解决实习僧的字体反爬问题。

构造字典

我们可以通过正则表达式提取xml中的字体的unicode,并将其通过encode('utf-8')进行编码,再通过decode('unicode_escape')解码出汉字。

把字体的编码当成key,真实的字体当成value,构造成替换字典。

具体构造字典代码如下:

def get_dict():   
    '''
    输入:无
    输出:字体文件对应的字体字典(包含字体编码和对应字体)以及字体编码
    '''
    r=requests.get('https://www.shixiseng.com/interns/iconfonts/file')
    with open ('new_font.woff','wb') as f:
        f.write(r.content)
    font1=TTFont('new_font.woff')
    font1.saveXML('new_font.xml')

    with open('new_font.xml') as f:
        xml=f.read()
    keys=re.findall('<map code="(0x.*?)" name="uni.*?"/>',xml)[:99]
    values=re.findall('<map code="0x.*?" name="uni(.*?)"/>',xml)[:99]
    for i in range(len(values)):
        if len(values[i])<4:
            values[i]=('\\u00'+values[i]).encode('utf-8').decode('unicode_escape')
        else:
            values[i]=('\\u'+values[i]).encode('utf-8').decode('unicode_escape')
    word_dict=dict(zip(keys, values))
    # print(word_dict)
    return word_dict,keys

整体逻辑

上面我们分析了本次爬取的关键点:字体反爬。接下来我们来整理一下整个爬虫的逻辑。

首先是获取字体字典,接着将网页源代码中的编码替换成人们可读的字体形式,然后就是分析爬取页面,利用xpath或css或BeautifulSoup等对网页源代码进行解析,提取出想要的关键信息,最后将数据存入txt文档或者其他数据库之中。下图是部分爬取结果。

本文的全部代码等所需文件已全部上传至后台,回复“实习僧”即可获得。

喜欢就点个赞吧❤

本文分享自微信公众号 - 算法与数据之美(algo_and_data),作者:斐波那契小李

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 字体反爬之大众点评

    大众点评的美食评论是大家平时选择吃饭地点的一种参考,通过他人品尝的经验来进行选择。今天就来爬一下大众点评吧~

    老肥码码码
  • 字体反爬之博X网实战

    今天的目标网站是某彩票网站博X网。其主要的反爬技术为字体反爬,话不多说,我们直接开始!

    老肥码码码
  • 字体反爬之猫眼电影

    目前看来是刚上映的银河补习班热度最高。但最后鹿死谁手还尚未可知,我们可以通过爬取猫眼的实时票房数据来一看究竟。

    老肥码码码
  • 17年编程生涯的三大经验总结

    17年编程生涯的三大经验总结 今年将迎来我编程的第十七个年头。我的编程之旅始于九十年代末,上大学的时候,主要涉足基于表格的网页设计,传统的ASP,和Micros...

    用户1289394
  • 2020可信云线上峰会丨云网融合新基建技术专讲为您解析云网未来

    所谓“云网融合”,云就是云计算,网即通信网。二者可谓是一对孪生兄弟,相辅相成,相互支撑。从云看网,云计算推动电信网络架构优化升级,如5G核心网、接入网、承载网的...

    云加小助手
  • 【译】使用 Webpack 和 Poi 构建更好的 JavaScript 应用

    Webpack 是一个将你所有的 JavaScript 文件,图片、字库以及 CSS 等打包到一个依赖关系图的构建工具。这使得你可以在源码中使用 require...

    逆葵
  • datables之加载数据时显示进度条

    TrueDei
  • AI加持、打通爱奇艺好看视频,百度短视频战略升级

    在过去的2019年里,最火的娱乐方式毫无疑问是短视频。随时随地的碎片化娱乐方式,雅俗共赏的综合性内容俘获了各个年龄段的用户,使得刷、拍短视频内容已经成为生活常态...

    翟菜花
  • 金额跳动动画效果

    Dwyane
  • windows下nodejs的安装和hello world小应用的创建

    前言:这两天学了下nodejs,网络上有很多教程但是我觉得不是很全面,所以写一下我学习的过程和当中所遇到的问题。

    Ewall

扫码关注云+社区

领取腾讯云代金券