专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

有问有答丨点评字体反爬虫中混淆定位暗坑

事情很直接,我来分享一下。在技术群里有朋友提出了这么一个问题和需求:

100_1.png

100_2.png

100_3.png

100_4.png

100_5.png

100_6.png

100_7.png

100_8.png

100_9.png

100_10.png

100_11.png

100_12.png

100_13.png

100_14.png

上面的一连串截图就是事情的大致经过,我来整理一下。群友 Ares 遇到的问题是在面对大众点评字体爬时不知道如何确定被混淆文字的位置,且混淆位置是随机的。当你遇到下图的代码时:

100_15.png

被混淆的是后面 3 位,前 2 位数字没被混淆。但换一个页面情形又不一样了,这就是困扰他的原因。群友 Rua 提出的正则是一个解决的办法,我觉得思路很好。这里我尝试了另一种解决的办法,和正则同样有效且效果稳定。我捋出了这些情况:

1、 这个 id 为 reviewCount 的 span 标签下有不定长的字符串
2、 字符串会被混淆,且混淆的个数不定
3、 混淆字符在字符串中的位置不定
4、 最后几个字是固定的—— 条评论
5、 混淆字符被 d 标签包裹着

如果我在工作中面对这个问题,我来编写代码会怎么处理呢?

1、 我认为要定位到 id 为 reviewCount 的 span 标签
2、 然后想办法拿到 span 标签下的文字
3、 接着去除 HTML 标签、空格和换行符得到纯文本

假设用 x 来代替被混淆的字符,以上图为例,这时候我得到的应该是 11xxx。现在我需要在字符串 11xxx 中找到 xxx 的位置即可。按照群友 Ares 的理解,得到的 11xxx 有可能是 1xx1x 或者 x1x1x,遂很难判断位置在哪。

这里我用一个取巧的方式:强制类型转换

既然 11xxx 的原身是数字,那么我是不是可以用强制转换的方式判断字符是否为数字呢?

即能转换的就是数字,不能转换的就是其它字符,这样我只需要记录下不能转换字符的下标就可以了。离成功只有一步,那就是编码。现在我们来整理一下用到的知识点或者技术点

1、 解析文本 —— 文本解析器,例如 Parsel
2、 定位 —— 路径查找语法,XPATH 或者 CSS 选择器语法
3、 抽取文字 —— XPATH 或者 CSS 选择器语法中的 text 函数
4、 去除噪声(HTML 标签、空格和换行符)—— DOM 操作器,例如 lxml;stirp 函数;
5、 强制类型转换 —— 内置类型转换,例如 int
6、 错误处理 —— 异常捕获和处理,try except
7、 判断位置且记录 —— for 循环和容器(例如列表)

我就不一步步分析了,伸手党是不存在的,请用手敲,完整代码如下:

100_16.png

经过几个页面的测试,确认没有问题。

如果你喜欢这样的文章,请在评论区留言告诉我。同时为韦世东的新书 《Python3 反爬虫原理与绕过实战》 加油打 Call,图灵 5 折活动 现价 44.5

100_17.png

100_18.png

作者:华为云云享专家 韦世东

文章永久链接:https://tech.souyunku.com/35617

未经允许不得转载:搜云库技术团队 » 有问有答丨点评字体反爬虫中混淆定位暗坑

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们