写点什么

听说学 Python 字体反爬的人,都打开过这篇博客,自如字体反爬,图片字体反爬

作者:梦想橡皮擦
  • 2022 年 7 月 30 日
  • 本文字数:888 字

    阅读完需:约 3 分钟

⛳️ 自如 实战场景

我们又碰到了一个字体反爬的站点,自如。该站点的字体反爬不是用字体文件实现的,而是基于图片+CSS,具体如下图所示。



这里运用 CSS 背景偏移技术实现数字的展示。


字体图片如下所示。



图片宽度和高度的比例是 300*28,其中 300 像素被等比例放置了 10 个数字,即每 30 个像素一个数字,实测间隔是 21.4 个像素。


后续可以参考该值做区分。


下面还需要确定一下每次刷新,图片是否发生变化。


刷新了一下,发生了变化  ̄ □  ̄||


但是原理是一样的,就是获取图片之后,然后解析对应的图片,通过 OCR 技术,识别文字。

⛳️ 自如 实战编码

获取源码,解析图片地址。


import requestsfrom lxml import etreeheaders = {    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36"}
res = requests.get('https://www.ziroom.com/z/',headers=headers)tree = etree.HTML(res.text)img_style = tree.xpath("//span[@class='num']/@style")[0]# 不用正则,直接截取字符串print(len('background-image: url(//'))print(len(');background-position: -42.8px'))# 不用正则,直接截取字符串img_src = img_style[24:len(img_style)-30]
复制代码


然后通过 OCR 软件识别相关信息,然后进行提取。


# 下载图片文件,通过 OCR 识别出数字
import ddddocrocr = ddddocr.DdddOcr()
res = requests.get('https://'+img_src,headers=headers)# print(res.content)# with open('./images/num_img1.png','wb') as f:# f.write(res.content)res = ocr.classification(res.content)print(res)
复制代码


测试中识别的数字为 5471380629,然后将其拆解即可。


测试发现截取图片地址的时候,有时候会出现图片地址错误,建议大家依旧使用正则表达式获取。


最后就是坐标与数字的对应关系了


  • -21.4:第一个数字

  • -42.8:第二个数字

  • -64.2:第三个数字


其余的都参考这个原理即可。


📢📢📢📢📢📢💗 你正在阅读 【梦想橡皮擦】 的博客👍 阅读完毕,可以点点小手赞一下🌻 发现错误,直接评论区中指正吧📆 橡皮擦的第 <font color=red>670</font> 篇原创博客


发布于: 刚刚阅读数: 3
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
听说学Python字体反爬的人,都打开过这篇博客,自如字体反爬,图片字体反爬_Python_梦想橡皮擦_InfoQ写作社区