1. 需求内容
前几天在RPA的接单群看到发布了这么一条需求,需求内容是需要抓取网页的数据,但是网页的数据是加密的,直接抓取的结果是乱码,当然可以采用对网页的JS进行逆向,破解文字加密的算法,但是难度会有点高,另一种方案就是对网页中的表格进行截图,然后再进行OCR识别,最后将识别的结果写入Excel中,这也是需求中建议的方式,原始需求如下:
原始的html如下:
2. 实现
使用GoBot结合之前我们讲的白嫖微信OCR的方法,还是很容易解决该问题的,开发的工作流如下:
关键步骤解析如下:
- 连接到浏览器,然后跳转到目标网页
- 新建一个Excel文件用于写入结果
- 开始循环
- 截图
- 下滑一页
- OCR识别
- 处理OCR结果,还原表格结构
- 将表格数据写入到Excel中
- 判断是否需要结束循环,如果不满足条件,则继续4-8的循环
- 保存Excel并关闭 针对上述的流程,有2个难点,一个是表格结构的还原,因为微信OCR识别结果是包含坐标的,我们可以根据坐标将表格结果还原,Python代码如下:
def ocr_to_table(data):
results = []
for item in data:
y = item["pos"].get('y',0)
if len(results) == 0:
results.append([item])
continue
matched = False
for result in results:
if y + 10 > result[0]["pos"].get('y',0) > y - 10:
result.append(item)
matched = True
break
if not matched:
results.append([item])
sorted(results, key=lambda x: x[0]["pos"].get('y',0))
for result in results:
sorted(result, key=lambda x: x["pos"].get('y',0))
return results
第二个难点是,翻页截图的时候,前后2张截图可能会有数据重合,而且OCR识别的时候会把图片上下边缘的一些文字给识别进去,流程里是使用字典进行了处理,当识别出的一行的列数大于5的时候才会进行处理,每次写入前会判断字典中是否有对应的数据,如果已经有了,则说明写入过了,则不进行写入了,没有才进行写入,并同步保存到字典中。
3. 结果
最后,会把网页的截图保存在电脑中,并将识别的结果写入到Excel中。
RPA很适合做一些重复的规则固定的事情,使用RPA也可以大大节省人工,如果你有类似的需求,欢迎关注。