网页内容解析实践

网页内容解析实践

  • 网页解码简述

很多网站为了防止爬虫对站内数据进行爬取,对网页内容进行特殊处理,例如对字符进行自定义编码,包括对数字(例如猫眼网站的票房数据)的“加密”,以及对中文字符(例如某些小说网站)的重新编码,这时,当爬虫得到网页内容时,不能够直接获取或者识别到目标信息,在一定程度上起到了”反爬“的效果。
例如 抖音用户页面信息如下:

在这里插入图片描述
对于作品3对应的页面源码查看结果:
在这里插入图片描述
可以看到数字均为以“&#”开头,“;”结尾的自定义编码字符,中间是4位十六进制字符,数字与四位字符存在一定的映射关系,例如:

0 ---------- xe603
1 ---------- xe618
2 ---------- xe610
3 ---------- xe61a
6 ---------- xe60b
7 ---------- xe60a
8 ---------- xe614
9 ---------- xe615

但是,当查看其他用户网页信息时,发现上面的对应关系有时会改变,那么怎么做到对所有同类型的页面数据进行通用解析呢?继续往下看。

  • 解码基本流程

如果一间上了锁的门可以打开,那就必然存在至少一把解锁的钥匙。

浏览器要完成对页面的渲染时,必然需要服务器返回的页面样式表(css)或者JavaScript代码,或者是页面的 style 标签内对应的样式文件,包括各种字体文件字符集,如“.woff’、*.ttf 等格式文件。

通过对文件内容解析,找到 数字 与 页面字符 的对应关系,即可 解码 对应的网页内容。

本次页面选用ttf格式文件,在页面找到文件地址并下载:http://s3.pstatp.com/ies/resource/falcon/douyin_falcon/static/font/iconfont_da2e2ef.ttf

文件内容解析,采用百度某子域名大佬提供的在线工具完成,工具地址:
http://fontstore.baidu.com/static/editor/index.html

解析结果如下:

在这里插入图片描述

可以看到数字3 对应 编码 有3个,均以美元符号开头,字符组合分别是:E604,E611,E61A,忽略大小写差异及附加字符,与上面看到的数字和 页面字符 的对应关系是一致的,其实0-9共10个数字,每个数字都有3个编码,也就是说,不同用户页面中,同一个数字 可以对应 三个不同的可能编码。

这样,结合 包含字符集与数字映射关系的ttf文件 和 百度字体文件 的解析 辅助,可以帮助爬虫 实现自动化识别 加密(其实是自定义编码字符)页面数据的识别。

  • 进一步的解码实践

在这里插入图片描述

以上只是一个简单的例子,对应 爬虫 遇到的 难度较低的 反爬----字符编码,而且是比较 低级的一种形式,也就是 字符集配置文件 即 ttf 文件是 固定不变的,但是还有相对复杂的情况(例如以前的猫眼电影票网站,现在改版了,通过异步 XHR 返回的 json 数据可以直接获取票房数据),就是每次 的 页面返回的 数字和 字符对应关系是 不同的,也就是每次 在网页 获取的 ttf文件是 变化的,这是就需要 结合 ttf 文件内容的详细解析结果,获得 数字 在 配置文件中 的 指纹信息,同时 结合 百度字体文件 的解析 辅助,即可实现 对 变化映射字符集 的 自动化解析。

上述功能的实现,均可借助python对应的第三方库(fonttools)进行编程来完成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值