猫眼电影用的是动态字体库

猫眼电影榜单国内票房榜,地址:https://maoyan.com/board/1

首先需要获得字体文件,在页面或css里搜@font-face或font-famil

在font刷新页面几次发现字体会变化,字体库是动态的

解决方案

建立字和动态字体库字形的联系

原理

字体用类似表的结构记录字,比如cmap记录了unicode索引和字形,这里反爬用到的表示glyf字形表,表里记录了具体的字形笔画数据,

且表里只记录了字形数据,不关联其他表。有专门的loca表按顺序记录glyf表里字形的位置,在使用字体时通过loca表来找到具体字形。

所以可以利用字形数据来找到自定义字体unicode与字的联系。

字体资料整理记录在: https://www.cnblogs.com/shenyiyangle/p/10700156.html 

找关联思路:

1.在猫眼电影下载一个字体做为基准,建立基准字体unicode和字的关系。

2.刷新网页后下载新字体,记为网站字体2,通过比较网站字体1和网站字体2的字形找到unicode和新unicode联系。

3.再通过相同的unicode来建立字和变化字体库unicode的联系,最后将新unicode替换成字。

代码

headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
r=requests.get("https://maoyan.com/board/1",headers=headers)
font1_url="http:"+re.findall("url\(\'(\/\/.*?woff)\'\)",r.text,re.M)[0]#创建font目录保存基准字体
if not os.path.exists("font"):font1=requests.get(font1_url,headers=headers) os.mkdir("font") with open("./font/base.woff","wb")as f: f.write(font1.content)

下载一次基准字体并保存到font目录

base_font = TTFont('./font/base.woff')
base_dict=[]
for i in range(len(baseFont.getGlyphOrder()[2:])):print(f"对应的数字{i+1}:")w=input()base_dict.append({"code":baseFont.getGlyphOrder()[2:][i],"num":w})

建立基准字体的unicode和真实字符的关系,查看unicode使用的软件是FontCreator

代码只需要执行一次,直接按顺序输入数字

new_font_url="http:"+re.findall("url\(\'(\/\/.*?woff)\'\)",r.text,re.M)[0]
font=requests.get(new_font_url,headers=headers)
with open("new_font.woff","wb")as f:f.write(font.content)
new_font = TTFont('new_font.woff')
new_font_code_list=new_font.getGlyphOrder()[2:]

页面改变后的字体下载,获取unicode列表

replace_dic=[]
for i in range(10):news = new_font['glyf'][new_font_code_list[i]]for j in range(10):bases = base_font['glyf'][base_dict[j]["code"]]if news == bases: unicode=new_font_code_list[i].lower().replace("uni","&#x")+";" num= base_dict[j]["num"] replace_dic.append({"code":unicode,"num":num})

建立新unicode和字符的关系

org_data=r.text
for i in range(len(replace_dic)):new_data=new_data.replace(replace_dic[i]["code"],replace_dic[i]["num"])

全局替换unicode成字符

tree=etree.HTML(org_data)
dds=tree.xpath('//dl[@class="board-wrapper"]/dd')
info=[]
for dd in dds:title=dd.xpath('.//p[@class="name"]/a/@title')[0]star=dd.xpath('.//p[@class="star"]/text()')[0].replace("主演:","") time=dd.xpath('.//p[@class="releasetime"]/text()')[0].replace("上映时间:","") realticket=dd.xpath('.//p[@class="realtime"]//text()')[1]+dd.xpath('.//p[@class="realtime"]//text()')[2].strip() totalticket=dd.xpath('.//p[@class="total-boxoffice"]//text()')[1]+dd.xpath('.//p[@class="total-boxoffice"]//text()')[2].strip() info.append({"标题":title,"主演":star,"上映时间":time,"实时票房":realticket,"总票房":totalticket})

抓一些信息,下面是结果

保存成csv

import csv
csv_file = open("1325.csv", 'w', newline='')
keys = []
writer = csv.writer(csv_file)
keys = info[1].keys()
writer.writerow(keys)
for dic in info: for key in keys: if key not in dic: dic[key ] = '' writer.writerow(dic.values()) csv_file.close()

结果

用的库

转载于:https://www.cnblogs.com/shenyiyangle/p/10711065.html

记录猫眼电影的自定义字体反爬相关推荐

  1. 记录东方财富网的自定义字体反爬

    链接:http://data.eastmoney.com/bbsj/201903/yjbb.html 数据内容是方块,需要找到字体文件. 抓包分析,第一条是个api,可以直接获取明文数据,为研究技术这 ...

  2. 猫眼电影,自定义字体解决方法

    猫眼破解数字反爬获取实时票房 一.概览 自前期写过汽车之家字体反爬破解实践之后,发现字体反爬应用还是很普遍.这两天有知乎朋友咨询如何实现猫眼票房数据的爬取,这里其实与上面的文章核心思想是一致的,但是操 ...

  3. 汽车之家 css自定义字体反爬解析

    本文主要是通过哦爬取汽车之家论坛一些用户热门精华帖子,介绍利用前端页面自定义字体的方式来实现反爬的技术手段,来实践破解它. 自定义字体:@font-face是CSS3中的一个模块,主要是实现将自定义的 ...

  4. python爬取b站搜索结果_Python爬虫实例:爬取猫眼电影——破解字体反爬,Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取,Python爬虫实例:爬取豆瓣Top250...

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  5. Python爬虫实例:爬取猫眼电影——破解字体反爬

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  6. 反爬终极方案总结---字体反爬

    最近临时受命,要针对采集我司网站的爬虫进行反制.虽然不太熟悉这个领域,但既然分到咱这儿了,那就上呗,有啥说的,谁让咱是"全栈工程师"呢(牛逼吹的大了点). 原本公司已经有了一套字体 ...

  7. 58同城数字字体反爬

    1.什么是字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的ttf文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容 比如5 ...

  8. 爬虫逆向学习(二):那些年遇到的花式字体反爬

    常见字体反爬破解策略 CSS偏移反爬虫 案例场景 破解策略 SVG字体反爬 案例场景 破解策略 自定义字体反爬 案例场景 破解策略 CSS偏移反爬虫 案例场景 css偏移反爬虫是通过样式left偏移覆 ...

  9. 爬虫进阶-- 字体反爬终极解析

    爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用python爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码.这种一般是网站设置了字体反爬 什么是字体反爬? 字体反爬虫: ...

最新文章

  1. Leetcode 146. LRU缓存机制 解题思路及C++实现
  2. linux studo命令,在 Linux 上使用 Visual Studio 开发环境
  3. k8s示例:RS和Deployment
  4. 一个easyui的案例(SSH)
  5. python字符串转日期_Python:将字符串时间字典转换为日期时间
  6. 【渝粤题库】陕西师范大学200831 编译原理 作业
  7. C语言 va_end 宏 - C语言零基础入门教程
  8. 设计灵感|独具中国韵味的海报设计
  9. 面向对象 “上”
  10. python如何获得列表中某个元素的index
  11. android 文件管理 显示缩略图,如何创建从Android视频文件路径视频缩略图
  12. 灰色按钮克星v.10
  13. 7.7_adadelta
  14. z8350cpu linux,跑分 Intel Z8350小有提升_平板电脑评测-中关村在线
  15. composer 安装php 扩展,composer 服务器安装扩展失败怎么办
  16. 函数对称性常见公式_高中函数对称性总结
  17. 剑指offer | 面试题54:二叉搜索树的第k大节点
  18. Unity二维平面上物体的移动(十一)-位移和推动力移动的区别
  19. 【Unity】预计算刚体运动轨迹
  20. Quartz配置资源介绍

热门文章

  1. 学废了!提高工作效率的五个步骤! | 每日趣闻
  2. 程序员薪资两极分化,如何成为高薪程序员?
  3. 谁说女生不适合当程序员?
  4. 出去之后,好好做人!华为两年,苦乐参半!
  5. 大揭秘:程序员工作也可以成为享受!
  6. 7月关键词“科幻”:梁建章新书《永生之后》发售 人类寿命将达10000年?
  7. Ztree节点增加删除修改和Icheck的用法
  8. 如何用Dart写一个单例
  9. TP-LINK、迅捷等品牌路由器存在质量问题
  10. +++++++X86平台系统启动流程