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

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

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

被混淆的是后面 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,遂很难判断位置在哪。spa

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

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

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

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

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

通过几个页面的测试,确认没有问题。字符串

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

相关文章
相关标签/搜索