漁滒 发表于 2022-1-16 23:37

使用ddddocr解决某汽车论坛网站字体反爬

@(使用ddddocr解决某汽车论坛网站字体反爬)

链接地址:aHR0cHM6Ly9jbHViLmF1dG9ob21lLmNvbS5jbi9iYnMvdGhyZWFkLzIyMTRiYWZhMDIyMGY4MGQvMTAxMTIzODE0LTEuaHRtbA==

![在这里插入图片描述](https://img-blog.csdnimg.cn/2c39cfac09c443b8bd0ac7705085da25.png?)

打开网页后,需要获取文章的正文内容,如果使用常规的办法,获取到的是存在乱码的内容

![在这里插入图片描述](https://img-blog.csdnimg.cn/89cd3801aca147b6b2c477a53ae2d3b9.png#pic_center)
可以看到有少许的文字出现乱码,然后在网页f12 查看

![在这里插入图片描述](https://img-blog.csdnimg.cn/3003144386984429a377a25c6fbd8449.png?)
其网页中确实不是常规的文字,而是这个网站的自定义字体。如果直接忽略这个文字,肯定是不可行的,得想办法把图片变成文字。

在源代码中搜索【tff】可以找到字体文件的地址,下载这个字体文件下来
![在这里插入图片描述](https://img-blog.csdnimg.cn/a8c345c6407848809a882d9baee90ce4.png#pic_center)
然后在网站http://font.qqe2.com/index-en.html中可以进行在线查看

![在这里插入图片描述](https://img-blog.csdnimg.cn/aa89a061828b44e493cc85caaa08b880.png?)

那么尝试先使用python把ttf文件转换为一个一个的图像

![在这里插入图片描述](https://img-blog.csdnimg.cn/47357ee2c19e4cffb41291595a8e98c2.png?)
在转换的时候需要注意,尽量把需要识别的内容放置在中间,并在在周边留有一定的空白,这样可以提高识别的准确率。

接下来就是要ocr来将图片转换为文字了,这里我是用的是ddddocr,安装相对来说很方便

```bash
pip install ddddocr
```

接着把每一张图片放到ddddocr这个模型去识别,就可以得到每一张图片的文字内容,最后得到一个文件名个文字的映射关系,是用方法也非常简单。

```python
Oocr = ddddocr.DdddOcr()# 初始化识别模型
text = Oocr.classification(img_bytes=image_io)# 把图片的字节放到模型中,返回识别的文字
```

最后再请求一次,然后通过ocr识别得到的映射关系替换自定义字体

![在这里插入图片描述](https://img-blog.csdnimg.cn/94d9c3027c3f409d9fd1dc5fc2af3ab4.png?)
可以看到识别非常的准备,完美解决了字体反爬的问题

wsddg 发表于 2022-5-5 17:59

wsddg 发表于 2022-5-5 16:44
如果我从页面里提取的数据是这样的'%uedb8',如何与图片名字映射呢,虽然字母是一样的但是不是一种编码呀 ...

我也是醉了,还是自己在网上搞到一个方法,贴出来给后来人
utf_code 就是后几个字母,用eval来拼出对应的\u开头的unicode十六进制的串要不还真不好整。。
eval('u\'\\u' + utf_code + '\'')
不知道渔哥这怎么处理的。。

狂笑一君 发表于 2022-1-18 16:20

漁滒 发表于 2022-1-18 15:34
贴一贴代码看看

大佬,如果用xpath分析后返回的数据是[<Element html at 0X10c28ee8>]这一类的值是哪里出错了?
代码大概是这样的:
html_text = etrtt.parse('html')
img_url = html_text.xpath('//div//a/@src')
print(img_url)

ccwuax 发表于 2022-1-17 00:14

每个字都用OCR?

lyghost 发表于 2022-1-17 07:33

就这一小部分字为啥不做映射呢

jy04468108 发表于 2022-1-17 08:53

为啥不用百度飞浆ocr?那个效果非常的好!

byyulei 发表于 2022-1-17 09:23

jy04468108 发表于 2022-1-17 08:53
为啥不用百度飞浆ocr?那个效果非常的好!

百度的慢

pwp 发表于 2022-1-17 09:30

宇哥现在法帖都是用机器人了,这么多错字,机器人算法有待改进{:1_918:}

Rezalt 发表于 2022-1-17 10:53

jy04468108 发表于 2022-1-17 08:53
为啥不用百度飞浆ocr?那个效果非常的好!

这个直接pip就完事了 飞浆还得部署两个效果都差不多当然那个方便那个来呀

elevo 发表于 2022-1-17 11:23

看着各位讨论的好激烈,有点看不懂啊

漁滒 发表于 2022-1-17 12:08

本帖最后由 漁滒 于 2022-1-17 12:09 编辑

ccwuax 发表于 2022-1-17 00:14
每个字都用OCR?
对的,每个都要。但是可以将映射表自己保存下来,然后自己去维护更新

漁滒 发表于 2022-1-17 12:08

jy04468108 发表于 2022-1-17 08:53
为啥不用百度飞浆ocr?那个效果非常的好!

都可以,方法是多样的
页: [1] 2 3 4 5
查看完整版本: 使用ddddocr解决某汽车论坛网站字体反爬