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