目标网站:汽车之家

目标网址:https://club.autohome.com.cn/bbs/thread/2d8a42404ba24266/77486027-1.html#pvareaid=2199101

缘由:

今天原来的同事让我看一个网站:“汽车之家”,起初看了看感觉应该没有反爬措施吧,但是实际在操作中,发现原来是字体进行了反爬加密。
查看源码:

不禁惊讶,难道是UTF-8编码的文字吗?于是找一个在线转换的网址:https://utf8.supfree.net/,结果发现…

通过转换还是发现,获取到的竟然还是假的字体。不信邪的我重新把文章给粘贴到NotePad++上结果发现:

原来这些字体是粘贴不上去的。好吧,只能考虑字体设置了反爬。看到源码中
<span style='font-family: myfont;'></span> 那么便通过myfont看是否能发现点东西不?结果还真有所发现

这不是..ttf字体吗?难道是使用这种字体加密的吗?那么先下载下来这种字体看是否猜测正确,下载过字体后这边推荐一款查看..ttf字体的一个工具:Font Creator(自行下载…)下载打开查看

上边每个字显示其字形和其字形编码,那么不禁想了想,这两种字体是怎么转换的呢?翻看好多大佬博客找到一款专门解析font的python包,fonttools。自行安装pip install fonttools 参考链接:https://darknode.in/font/font-tools-guide/

# 那么便开始通过字体库进行解析
world = TTFont('./world.ttf')
# 读取响应的映射关系
uni_list = world['cmap'].tables[0].ttFont.getGlyphOrder()  # 'cmap' 表示汉字对应的映射 为unicode编码
print(uni_list) # 按顺序拿到各个字符的unicode编码
# 打印结果:
['.notdef', 'uniEDE8', 'uniED35', 'uniED87', 'uniECD3', 'uniED25', 'uniEC72', 'uniEDB2', 'uniEE04', 'uniED51', 'uniEC9D', 'uniECEF', 'uniEC3C', 'uniEC8D', 'uniEDCE', 'uniED1B', 'uniED6C', 'uniECB9', 'uniEDFA', 'uniEC57', 'uniED98', 'uniEDEA', 'uniED36', 'uniEC83', 'uniECD5', 'uniEC21', 'uniED62', 'uniEDB4', 'uniED00', 'uniED52', 'uniEC9F', 'uniEDDF', 'uniEC3D', 'uniED7E', 'uniECCA', 'uniED1C', 'uniEC69', 'uniECBB', 'uniEDFB']
# .notdef 并不是汉字的映射, 而是表示字体家族名称。将映射列表转换成unicode的类型,因为自己文中获取的是字符串unicode类型的,当然你也可以转化为utf-8,不过你获取的文章内容也要转化为utf-8
unicode_list= [eval(r"u'\u" + uni[3:] + "'") for uni in uni_list[1:]]

关于映射这点,其实是有点疑问的utf-8和unicode之间有什么关系?建议参考知乎详解:

https://www.zhihu.com/question/23374078

好了,上边已经把所有的东西准备好了,写一下代码吧。

# coding:utf-8
import re
import requests
from scrapy import Selector
from fontTools.ttLib import TTFontclass QiCheZhiJiaSpider:def article_content(self):url = 'https://club.autohome.com.cn/bbs/thread/2d8a42404ba24266/77486027-1.html#pvareaid=2199101'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'}try:response = requests.get(url=url, headers=headers).textresponse_info = Selector(text=response)except BaseException as e:print(e)else:content = response_info.xpath('//div[@class="tz-paragraph"]//text()').extract()  # 获取列表的形式内容。# print(content)content_str = ''.join(content)# 紧接着获取字体的链接world_href = re.findall(r",url\('(//.*\.ttf)'\).*", response, re.M or re.S)[0]world_href = 'https:' + world_hrefworld_content = requests.get(url=world_href, headers=headers).content# 对获取到的字体进行下载..........with open('./world.ttf', 'wb') as f:f.write(world_content)# 那么便开始通过字体库进行解析world = TTFont('./world.ttf')# 读取响应的映射关系uni_list = world['cmap'].tables[0].ttFont.getGlyphOrder()unicode_list = [eval(r"u'\u" + uni[3:] + "'") for uni in uni_list[1:]]world_list = ["右", "远", "高", "呢", "了", "短", "得", "矮", "多", "二", "大", "一", "不", "近","是", "着", "五", "三", "九", "六", "少", "好", "上", "七", "和", "很", "十","四", "左", "下", "八", "小", "坏", "低", "长", "更", "的", "地"]  # # 录入字体文件中的字符。必须要以国际标准的unicode编码for i in range(len(unicode_list )):content_str = content_str.replace(unicode_list [i], world_list[i])print(content_str)if __name__ == '__main__':qi_che_zhi_jia = QiCheZhiJiaSpider()qi_che_zhi_jia.article_content()

结果展示:

不足之处欢迎指出,大家一起进步。
参考大佬博客:

https://zhuanlan.zhihu.com/p/32087297
https://blog.csdn.net/zwq912318834/article/details/80268149

疑问之处:那么每一个网页都要手动把world_list给写好吗?这不是我们想要的自动化效果呀,有没有更好的办法呢?欢迎提出。

Python爬虫---汽车之家字体反爬相关推荐

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

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

  2. 爬虫:汽车之家字体反爬

    1.我的目的 汽车之家对某些字体进行了反爬虫操作,直接获取是一堆乱码,这次要做的是对这些乱码进行转化,转化为我们想要的符号\汉字 2.前提知识 首先得了解一下字体反爬虫是什么意思: 当前css可以指定 ...

  3. python爬虫 : 汽车之家车型最新爬取解密方法

    汽车之家作为一家上市公司,本身具有强大的技术实力支持,简单的数据易爬,复杂而机密的数据,可见不可求. 如下图所示:核心的数据,在页面是找不到文字的,全是空空空空!!!和尚一样! 经过测试发现,这些数据 ...

  4. 笔记 - 汽车之家的反爬手段

    一.字体反爬 方法转自:汽车之家字体反爬破解实践 - 谢俊杰的文章 - 知乎 并稍加修改(更换要爬的页面,python2改为python3) 假如我们要爬这个页面https://k.autohome. ...

  5. 使用ddddocr解决某汽车论坛网站字体反爬

    使用ddddocr解决某汽车论坛网站字体反爬 链接地址:aHR0cHM6Ly9jbHViLmF1dG9ob21lLmNvbS5jbi9iYnMvdGhyZWFkLzIyMTRiYWZhMDIyMGY4 ...

  6. Python爬虫技巧!网站有反爬?我们有selenium!

    Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 文章最后有免费的Python资料,获取方式,关注头条号,私信回复资料获取下载链 ...

  7. Python +tensorflow+pygame 破解任意字体反爬

    什么是字体反爬? 每个字符在 都可以用 unicode 编码表示  而字体文件可以理解为Unicode 和 字体形状的映射 ,所以在计算机中字符可以变成我们人类所能理解的形状,所以字体反爬的关键就是字 ...

  8. 爬虫之遇到woff字体反爬

    本篇博文的主题就是处理字体反爬,其实这种网上已经很多了,只是这次有点不一样,处理方式变化了点,记录一下. 以python3.7为基础 直接干货: 网站是json数据返回的: 这个网站有个好玩的地方,直 ...

  9. web爬虫——某电影网站字体反爬

    某电影网站字体反爬 爱好学习及分享,若文章侵权,优先联系本人删帖处理. 几个关键点 base字体文件分析 打开目标网页,找到woff文件链接 下载该woff文件,并在字体编辑器里打开 记录下数字与字符 ...

  10. python爬虫----汽车之家的汽车论坛的最新精华帖

    模块 import requests---网页请求 import re---正则表达式 from bs4 import BeautifulSoup as bs---节点处理 抓取的内容 这次主要抓取汽 ...

最新文章

  1. MyEclipse 快捷键1(CTRL)
  2. 通过PDF无纸化测试SAP SmartForm打印效果
  3. Linux 文件权限rwx
  4. Java不是文明语言吗?
  5. xml文档包含html代码_为什么文档很重要,以及为什么应将其包含在代码中
  6. ruby array_Ruby中带有示例的Array.sample()方法
  7. javaJavaScript DOM
  8. APNs Push Notification教程一
  9. 古文觀止卷七_獲麟解_韓愈
  10. php定时自动发送邮件(从数据库取数据)(超详细版本)
  11. python摇骰子游戏小案例
  12. android google map v2 获取当前位置,如何在google map v2中获取当前位置信息?
  13. win10系统下,数据库密码忘记
  14. 密码算法原理与分析:RSA安全与秘钥基础设施
  15. 2022-2027年中国数据银行市场竞争态势及行业投资前景预测报告
  16. 解决nested exception is java.lang.IllegalArgumentException: No converter found for return value of typ
  17. 【095期】网易二面:Kafka 为什么吞吐量大、速度快?
  18. NYOJ-33-蛇形填数
  19. 应用系统中的报表开发成本知多少?
  20. 大前端 - nodejs -egg实战 - web端(vue3.0)

热门文章

  1. C51单片机实验——定时器实验
  2. linux ps -ang,PS顶级一键人像修图插件-DeliciousRetouchPlus
  3. C++公约数和公倍数
  4. phpstudy mysql局域网访问_phpstudy 局域网访问
  5. 关注点分离(Separation of concerns, SoC)
  6. QT的UI界面效果预览快捷键
  7. 由中国银联主导和推行的“盒子支付模式”正式推出多平台应用
  8. 【手写源码-设计模式7】-桥接模式-基于苹果小米手机刷机场景
  9. 五、中枢背驰及盘整背驰
  10. jdbc跨库查询 mysql_JDBC如何实现跨数据库的查询