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

本文分享了大众点评字体反爬问题的解决办法。群友 Ares 遇到确定被混淆文字位置的难题,因混淆位置随机。作者提出一种取巧方式,用强制类型转换判断字符是否为数字,记录不能转换字符的下标。还整理了用到的技术点,并给出完整代码,经测试无误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有坑不怕    一起来填 

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

cca48255ba3e6d1e58ca12d1c146e2ac.png
1c036fcd27d86d70b1835e94a5987e00.png
78645cefd5aae149c50545ea5482d205.png
7ccc073fbbf5aea0ef8eee9d48077bbd.png
213329fa85b83e5b319eaad6eabf03a1.png
247057cea45ae0f2daca396256d43370.png
5e57f9519eb8c38b2e06d27291015d77.png
7802848d855498ae3c98cf8858f4efac.png
d9fa75b419a623d7efe86e0ee3f6d182.png
bb2058a8d09db49da089fff198372e1e.png
20120b1186f71d5b2a6d78f708221b26.png
837b011b085e912ad5164046647aafe3.png
8f78b7d08f67b63992e3f2f50a417b90.png
26253ceea83e7c2ba85b9b7aaea34ae6.png

我们来看看,到底是哪儿

2d4f8831e4ad6e1610feda0a74eefa94.png

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

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

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

03786c3d22fd17239092e92911887f90.png

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

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

46a42cc3b44d7cf6b4af9097a6ed8f46.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值