最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python爬虫---汽车之家字体反爬

来源:懂视网 责编:小采 时间:2020-11-27 14:11:22
文档

Python爬虫---汽车之家字体反爬

Python爬虫---汽车之家字体反爬:本篇文章给大家带来的内容是关于Python爬虫---汽车之家字体反爬,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。目标网站:汽车之家目标网址:https://club.autohome.com.cn/bbs/thread/2d8a42404ba24266/7748602
推荐度:
导读Python爬虫---汽车之家字体反爬:本篇文章给大家带来的内容是关于Python爬虫---汽车之家字体反爬,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。目标网站:汽车之家目标网址:https://club.autohome.com.cn/bbs/thread/2d8a42404ba24266/7748602
本篇文章给大家带来的内容是关于Python爬虫---汽车之家字体反爬,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

目标网站:汽车之家

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

缘由:

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

查看源码:

1.png

不禁惊讶,难道是UTF-8编码的文字吗?于是在线转换,

20190117164200808.png

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

2019011716450417.png

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

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

20190117165350543.png

上边每个字显示其字形和其字形编码,那么不禁想了想,这两种字体是怎么转换的呢?翻看好多大佬博客找到一款专门解析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 TTFont
class 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).text
 response_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_href
 world_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()

结果展示:

20190117171904695.png

文档

Python爬虫---汽车之家字体反爬

Python爬虫---汽车之家字体反爬:本篇文章给大家带来的内容是关于Python爬虫---汽车之家字体反爬,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。目标网站:汽车之家目标网址:https://club.autohome.com.cn/bbs/thread/2d8a42404ba24266/7748602
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top