python爬虫---字体反爬
目标地址:http://glidedsky.com/level/web/crawler-font-puzzle-1
打开google调试工具检查发现网页上和源码之中的数字不一样, 已经确认该题目为 字体反扒 直接进入正题:
获取字体文件:
1丶直接找到数字节点属性:style 的 font-family 的值:glided_sky,在源码中找到 引入的的字体文件 并保存下来到本地
2丶该字体文件通过base64编码保存的 直接请求 将编码的值 和 节点中的数字内容 获取到 (获取的方式自己选择合适的即可,本文使用 pyquery 模块进行操作 )
import base64
import requests
from pyquery import PyQuery as pyq
response = requests.get(f'http://glidedsky.com/level/web/crawler-font-puzzle-1?page=1', headers=headers, cookies=cookies,verify=False)
doc = pyq(response.text)
cts = doc('style')
base_info = ''.join([ pyq(i).text().split('base64,')[1].split(')')[0] for i in cts])
cts = doc('.col-md-1')
num_list = ([pyq(i).text() for i in cts])
print(f' num_list {num_list}')
3丶将获取得到的base64值保存为本地 .ttf 并将 源码中的数值进行匹配 得到网页上展示的真正值
将保存的字体文件使用 字体编辑器 打开并手动确认编码和数字之间的对应关系
具体实现代码如下
# 字体转换
def font_switch(base_info, number_info):
page_one = base_info
b=base64.b64decode(page_one)
with open('new_page.ttf','wb')as f:
f.write(b)
font=TTFont('main.ttf') # 提前保存的一份本地文件 打开本地字体文件local.ttf
# font.saveXML('main.xml') #将ttf文件转化成xml格式并保存到本地,主要是方便我们查看内部数据结构
obj_list1=font.getGlyphNames()[1:] #获取所有字符的对象,去除第一个
uni_list1=font.getGlyphOrder()[1:] #获取所有编码,去除前1个
print(f' uni_list1 {uni_list1}')
# 手动确认编码和数字之间的对应关系,保存到字典中
dict={
'seven':6,
'six':8,
'four':0,
'eight':5,
'two':1,
'five':4,
'one':9,
'zero':7,
'nine':2,
'three':3,
}
# 网页新下载的
font2=TTFont('new_page.ttf') # 打开新下载的字体文件
obj_list2=font2.getGlyphNames()[1:] #获取所有字符的对象,去除第一个
uni_list2=font2.getGlyphOrder()[1:] #获取所有编码,去除前1个
new_dict= {}
for uni2 in uni_list2:
print(f'uni2 : {uni2}')
obj2=font2['glyf'][uni2] #获取编码uni2在new_page.ttf中对应的对象
for uni1 in uni_list1:
obj1=font['glyf'][uni1]
if obj1==obj2:
new_dict[f'{uni2}'] = dict[uni1]
# 得到字体转化后的真正值
print(f' new_dict {new_dict}')
#TODO 将传进来的数字转化
number = number_info
# 列表
lists = [
'zero',
'one',
'two',
'three',
'four',
'five',
'six',
'seven',
'eight',
'nine',
]
new_number = [int(''.join([str(new_dict[lists[int(n)]]) for n in num])) for num in number]
return sum(new_number)
将获取的值传入这个方法就能获取得到网页上的正确数值了
!!!搞定!!! 将剩下的 999 页的值 统计出来 求和 就得到了正确答案
python爬虫---字体反爬的更多相关文章
- Python爬虫-字体反爬-猫眼国内票房榜
偶然间知道到了字体反爬这个东西, 所以决定了解一下. 目标: https://maoyan.com/board/1 问题: 类似下图中的票房数字无法获取, 直接复制粘贴的话会显示 □ 等无法识别的字 ...
- python解析字体反爬
爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用python爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码.这种一般是网站设置了字体反爬 一.58同城 用谷歌浏览器打开 ...
- 抖音爬虫教程,python爬虫采集反爬策略
一.爬虫与反爬简介 爬虫就是我们利用某种程序代替人工批量读取.获取网站上的资料信息.而反爬则是跟爬虫的对立面,是竭尽全力阻止非人为的采集网站信息,二者相生相克,水火不容,到目前为止大部分的网站都还是可 ...
- Python爬虫实战——反爬策略之模拟登录【CSDN】
在<Python爬虫实战-- Request对象之header伪装策略>中,我们就已经讲到:=="在header当中,我们经常会添加两个参数--cookie 和 User-Age ...
- Python爬虫实战——反爬机制的解决策略【阿里】
这一次呢,让我们来试一下"CSDN热门文章的抓取". 话不多说,让我们直接进入CSND官网. (其实是因为我被阿里的反爬磨到没脾气,不想说话--) 一.URL分析 输入" ...
- python爬虫--cookie反爬处理
Cookies的处理 作用 保存客户端的相关状态 在爬虫中如果遇到了cookie的反爬如何处理? 手动处理 在抓包工具中捕获cookie,将其封装在headers中 应用场景:cookie没有有效时长 ...
- Python爬虫实战——反爬策略之代理IP【无忧代理】
一般情况下,我并不建议使用自己的IP来爬取网站,而是会使用代理IP. 原因很简单:爬虫一般都有很高的访问频率,当服务器监测到某个IP以过高的访问频率在进行访问,它便会认为这个IP是一只"爬虫 ...
- Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
说说这个网站 汽车之家,反爬神一般的存在,字体反爬的鼻祖网站,这个网站的开发团队,一定擅长前端吧,2019年4月19日开始写这篇博客,不保证这个代码可以存活到月底,希望后来爬虫coder,继续和汽车之 ...
- Python爬虫入门教程 63-100 Python字体反爬之一,没办法,这个必须写,反爬第3篇
背景交代 在反爬圈子的一个大类,涉及的网站其实蛮多的,目前比较常被爬虫coder欺负的网站,猫眼影视,汽车之家,大众点评,58同城,天眼查......还是蛮多的,技术高手千千万,总有五花八门的反爬技术 ...
随机推荐
- 6月4日 python学习总结 初次接触jQuery
1. jQuery是什么?是一个轻量级的,兼容多浏览器的JS库(write less, do more) 1. 是一个工具,简单方便的实现一些DOM操作 2. 不用jQuery完全可以,但是不明智. ...
- Java设计模式之单例模式理解
前言 本片博客主要记录Java23种设计模式中的创建型模式中的单例模式.单例模式可分为两类,一种是饿汉式,一种是懒汉式.饿汉式的三种设计方式(静态变量方式.静态代码块方式.枚举方式),懒汉式(单锁检查 ...
- 初识$router和$route
初识\(router和\)route 一.前言 vue框架中单页面富应用可以说是其最大的优点功能之一了,应用起来简单直观,说起单页面富应用那就必须得联想到\(router**,但是在项目开发过程中 ...
- Python的安装与开发环境的选用
2021快要结束了,这一年我依旧深耕于python的广阔土壤,将重点放在机器人和传感器的角度.也收获了一大批正在学习和期望学习python的朋友. 正在学习的暂且不言,这篇主要是写给期望学习的朋友,同 ...
- JVM内存模型——堆(heap)、栈(stack)和方法区(method)
JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:堆内存用于存放由new创建的对象和数组.堆是JVM管理的内存中最大的一块,堆被所有线程共享,目的 ...
- http多路复用?
Keep-Alive: Keep-Alive解决的核心问题:一定时间内,同一域名多次请求数据,只建立一次HTTP请求,其他请求可复用每一次建立的连接通道,以达到提高请求效率的问题.这里面所说的一定时间 ...
- 谈一谈 Kafka 的再均衡?
在Kafka中,当有新消费者加入或者订阅的topic数发生变化时,会触发Rebalance(再均衡:在同一个消费者组当中,分区的所有权从一个消费者转移到另外一个消费者)机制,Rebalance顾名思义 ...
- 面试问题之计算机网络:简述TCP和UDP的区别以及优缺点
转载于:https://blog.csdn.net/liulin1207/article/details/80960964 一.TCP: TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四 ...
- 5. Git初始化及仓库创建和操作
4. Git初始化及仓库创建和操作 基本信息设置 1. 设置用户名 git config --global user.name 'itcastphpgit1' 2. 设置用户名邮箱 git confi ...
- 三、原理图生成网表并导入PCB放置元件
1.生成网表 2.成功标志 3.新建PCB文件 4.导入网表至PCB 5.导入网表成功标志 6.创建.psm文件(绘制的封装格式为.dra文件,在PCB里面要以.psm的文件存在) 将丝印做成封装需 ...