严重声明:本文仅用于学习交流,不得用于商业用途,同时希望大家遵循robots协议,维护网络和谐。
本猿最近在逛一些网站的时间。在打开浏览器的f12查看人家前端代码咋写的时候,经常会发现就是页面上显示的内容和源码里面的不一样,然后自己请求一遍也还是不一样,奇怪,猿,妙不可言?本着猿精神,上网查了下,这种属于字体反爬策略。应用的还是不少的,所以,在这里将在下对字体反爬的见解写一下。

  • 先观察人人车网站,看看人家的实现: 人人车
  1. 打开一个详情页,f12看页面标签,可以发现标题里面年款啥的页面上展示给我们的和我们看到的不一样。在查看了很多页面后发现,人人车字体变化的都是数字:

  2. 查看标题css样式的时候发现,标题标签和一个css样式利用属性名关联上了,所以这个属性名肯定有问题:

  3. 查看服务器给我们发的响应包,直接发现一个跟上面标签属性名一样的字体文件,利用谷歌浏览器的规范输出,直接查看,发现最下面的一行数字顺序是被打乱的。另外还有一个字体文件,但是数字顺序是正常的:

  4. 我们看这两串数字,因为i标题采用了个乱序数字字体文件名的样式,暂时总结出个规律:就是本应该在1的位置上他换上了2,2>1,3>4,4>3,5>8,8>5:

  5. 按照4中的规律再看首页的源码和展示给我们的标题,猿来如此:

  6. 应用上面过程查看其它页面,发现都是上面这样的套路,但是这个字体文件的url和内容是变化的。

  • 下面是我对人人车字体加密的逆向处理,一个小demo,所以就直接拿加密的标题来演示:

    测试代码,完整:

    # !/usr/bin/python3
    # -*- coding: utf-8 -*-
    """
    # @Time      :   2020/4/25 13:32
    # @Author    :   hupoc
    # @File      :   second_hand_car_renrenche.py
    # @Desc      :
    """
    import io
    import os
    import requests
    from fontTools.ttLib import TTFont
    from scrapy import Selectordef font_transfor(translate_text, html, url):"""网页上使用字体文件的文本转换:param translate_text: 需要转换的文本:param html: 经过scrapy.Selector()转换后的响应对象:param url: 请求的url:return: 转换后的文本"""# 获取字体名所在标签文本font_interface_str = html.xpath("//div[@class='title']/h1/@class").extract_first()if font_interface_str and 'title-name' in font_interface_str:# 提取字体文件名称font_interface_name = font_interface_str.replace('title-name', '').strip()else:# 如果没有title-name表示没有应用字体文件print('没有提取到字体名所在标签文本,url:{0}'.format(html.url))returnfile_name = url.rsplit("/", 1)[-1] + '_' + font_interface_str# 拼接字体文件 在本地保存路径file_ttf = '/tmp/renrenche_font/{0}.woff'.format(file_name)if not os.path.exists(os.path.dirname(file_ttf)):os.makedirs(os.path.dirname(file_ttf))# 下载字体文件,保存到本地路径url = 'https://misc.rrcimg.com/ttf/{0}.woff'.format(font_interface_name)resp = requests.get(url)if not resp:print('请求字体文件失败')try:font = TTFont(io.BytesIO(resp.content))except Exception as e:returnfont_obj = font['cmap']font_tables = font['cmap'].tablesuni_list = font['cmap'].tables[0].ttFont.getGlyphOrder()# 生成转换规则base_num_list = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']base_eng_list = {'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4', 'five': '5','six': '6', 'seven': '7', 'eight': '8', 'nine': '9'}mapping_list = [base_eng_list[_] for _ in uni_list[1:]]font_dict = dict(zip(mapping_list, base_num_list))# 对需要转换的文本进行转换transfor_str = [_ if not _.isdigit() else font_dict[_] for _ in translate_text]# 关闭字体文件font.close()# 返回正确的文本return ''.join(transfor_str)def get_renrenche_detail():# 请求页面获取响应detail_url = 'https://www.renrenche.com/bj/car/c2d4fdd2902df36b'response = requests.get(detail_url)if not response or response.status_code != 200:print('人人车详情页请求失败')return# 将响应文本转为lxml对象,为了方便,使用的是scrapy.Selector()html = Selector(text=response.text)# 获取标题,并规格化标题文本titles = html.xpath("//div[@class='title']/h1/text()").extract()title = ' '.join(titles).replace('\n', '').strip()# 转换标题文字,获取正确文本true_title = font_transfor(title, html, detail_url)# 打印文本print(true_title)if __name__ == '__main__':# 请求人人车的二手车详情页get_renrenche_detail()
    

    测试代码运行结果:

爬虫 人人车字体反爬分析(含源码)相关推荐

  1. 爬虫 字体反爬分析(1) 人人车 -- 含源码

    严重声明:本文仅用于学习交流,不得用于商业用途,同时希望大家遵循robots协议,维护网络和谐. 本猿最近在逛一些网站的时间.在打开浏览器的f12查看人家前端代码咋写的时候,经常会发现就是页面上显示的 ...

  2. Python爬虫六:字体反爬处理(猫眼+汽车之家)-2018.10

    环境:Windows7 +Python3.6+Pycharm2017 目标:猫眼电影票房.汽车之家字体反爬的处理 ---全部文章: 京东爬虫 .链家爬虫.美团爬虫.微信公众号爬虫.字体反爬.Djang ...

  3. Python爬虫编程12——字体反爬

    什么是字体反爬 就是网页的制作者,他在发布他网页数据的时候.将其中一部分的字体变成乱码.即使你把网页的数据爬取下来,你也获取不到真实数据的样貌.这样就达到了一个反爬虫的目的. 如何解决字体反爬 1.下 ...

  4. 爬虫逆向之字体反爬(二)、镀金的天空-字体反爬-2

    趁热打铁来写字体反爬的第二篇,首先是题目 网页上显示的不是常规的数字,源码里面也是一些汉字 虽然看上去很乱,但是仔细观察还是能发现一些规律,比如:长 对应 2,思对应 1 所以这里的解题思路,也是先找 ...

  5. 爬虫逆向之字体反爬(一)、镀金的天空-字体反爬-1

    题目地址:http://www.glidedsky.com/level/crawler-font-puzzle-1 写一下之前处理过的几个字体反爬实战,也是很常见的一种反爬类型,这是第一篇 先来看一下 ...

  6. v39.06 鸿蒙内核源码分析(异常接管) | 社会很单纯 复杂的是人 | 百篇博客分析HarmonyOS源码

    子曰:"主忠信,毋友不如己者,过则勿惮改." <论语>:子罕篇 百篇博客系列篇.本篇为: v39.xx 鸿蒙内核源码分析(异常接管篇) | 社会很单纯 复杂的是人 硬件 ...

  7. java编写爬虫_Java怎么写网络爬虫?分分钟带你爬取,源码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 网络爬虫网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. ...

  8. 实习僧网站字体反爬破解思路及步骤分享

    需要用到的第三方包 fontTools 崔庆才博客:今天,我终于弄懂了字体反爬是个啥玩意! 哔哩哔哩视频:python零基础一节课带你玩转字体反爬 测试网站选取了实习僧:实习僧 TTF(TrueTyp ...

  9. pythonttf字体反爬虫_Python爬虫---汽车之家字体反爬

    本篇文章给大家带来的内容是关于Python爬虫---汽车之家字体反爬,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 目标网站:汽车之家 目标网址:https://club.autoh ...

最新文章

  1. windows xp系统驱动安装问题
  2. ORB-SLAM(八)ORBmatcher 特征匹配
  3. 阻止路由跳转得方式_vue路由拦截及页面跳转的设置方法
  4. python基础语法及知识总结-Python 学习完基础语法知识后,如何进一步提高?
  5. float占几个字节_一个HashMap对象占多少字节?
  6. 随手记:IDAPro蛮强大
  7. 飞桨PaddlePaddle送算力 | 每日登录即送12小时,连续5天还有加送!
  8. linux内核中kset是什么意思,Linux内核之设备驱动-底层数据结构kobject/kset
  9. OpenAI 将 k8s 扩展至 7500 个节点以支持机器学习
  10. ms12_004漏洞进行渗透
  11. c++多边形扫描线填充算法_一文读懂扫描线算法
  12. android 5.1 内核版本号,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
  13. windows系统上安装.cab文件
  14. 商空间的理解(Quotient space)
  15. C语言中char字符为0时的情况
  16. GoogleStyle编程代码规范
  17. 微信小程序开发者工具 无法加载以下来源的扩展程序 问题解决
  18. openstreetmap-server-ubuntu-16-04+GraphHopper搭建离线地图服务器和离线路径规划
  19. 005_HTML制作炫酷登录界面(CSS精灵图、背景图片局部显示)
  20. 如何做好公众号内容运营?这三个步骤就够了

热门文章

  1. 【树莓派C语言开发】实验03:七彩LED模块
  2. linux系统编程:系统函数system
  3. linux系统中vi/vim文本编辑器的使用简介
  4. 每日英语:The Deeply Odd Lives of Chinese Bureaucrats
  5. 学前端的人为什么也要学习一些后端
  6. 状态转移矩阵(status transition matrix )
  7. h3c怎么设置虚拟服务器,h3c虚拟服务器设置
  8. 素描滤镜_您可能不知道的素描技巧和键盘快捷键
  9. Laravel第三方登录开发之实现微博登录
  10. RabbitMQ之消息模式简单易懂,超详细分享