爬取58同城,解决反爬字体加密解析问题

本文介绍了如何应对58同城网页中字体加密导致的价格信息乱码问题。通过分析CSS样式,查找字体映射文件,利用Python进行Base64解密或下载字体文件,借助fontTools转换为XML查看映射关系,最终编写解密代码来恢复真实信息。测试表明,这种方法能有效解析加密数据。
摘要由CSDN通过智能技术生成

【导语】我们在爬取数据中,会遇到字体乱码的下,其实是字体加密,本篇文章主要解决字体解密这种反爬方式。

1.在浏览器打开58同城网址进入北京租房
2.点击检查,找到房租价格对应位置,发现源码中价格部分是乱码,但是页面显示正常
3.得出结果这段代码是经过字体加密的

我们看到的如下:
image.png
那么,按F12查看源码,如下:
image.png
【解决思路】

字体加密一般是通过字体文件进行映射,所以我们只需要找到对应的字体文件,然后通过一些手段找到他们字体对应的映射关系就可以破解字体反爬

1、当我们发现字体反爬之后,首先可以找一下是通过哪一个类进行的字体映射,因为字体映射都会在具体的css样式上进行体现
2、我们可以先删除掉自身的一些样式,观察页面变化,当我们删除自身样式或者父类样式之后页面恢复了乱码,就可以确定是哪一个类进行的字体加密
image.png
3、通过加密样式寻找字体映射文件方式

字体加密一般是分为两种
①通过base64加密的字体文件,这种文件可以通过python的base64模块进行解密
②通过url的方式引入字体文件

以上两种我们都可以通过搜索对应的加密样式找到具体文件
首先可以在当前页面中搜索是否存在对这个类的定义
如果没有找到可以在network中全局搜索存在这个样式的css文件
找到加密文件之后无论是哪一种加密方式都可以通过python请求获取加密字体文件
image.png
4、获取加密文件的代码

通过正则表达式获取加密文件内容
获取到加密文件之后如果想要看里面的内容可以通过base64进行解密,并写入woff文件中
之后可以通过fontTools包将字体文件转为xml进行查看

import re
from fontTools.ttLib import TTFont
import base64

import requests

res = requests.get('https://bj.58.com/chuzu/?utm_source=market&spm=u-2d2yxv86y3v43nkddh1.BDPCPZ_BT&PGTID=0d100000-0000-13e1-612a-4575bfeb5389&ClickID=2')

bs64 = re.findall(';base64,(.*?)\&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值