前言
这几天,因“业务需要”,一直在写处理表格的脚本(三天打鱼两天晒网)
但是表格中是有图片的,我需要定位图片后,OCR文字识别出来结果,一开始的处理方式是,将xlsx
后缀改为zip
xlsx的图片都是存储在./xl/media/
中
但是有个问题就是,这里面的图片顺序,和做表格的人拖入图片的顺序相关,那么假设那人顺序打乱,那么图片就很难定位(因为别的单元格也有图片,那么那些图片就是干扰源了)
所以尝试了一下午无果后,决定换一个路子
正文
因为文档是腾讯文档
,所以基于多年的网络基础(胡思乱想),于是猜想,这些图片能在腾讯文档里面躺着,是不是出生就自带坐标
审查元素中,先随便定位一个图片,找到图片URL
复制这条,接着切换到Network选项卡
刷新一下界面,接着在左边搜索图片url,看一下是使用了哪个接口
把这串json
保存下来,慢慢分析
拿前面的图片url,在这串数据中搜索,得到这么一串属于这个图片的数据
实际分析后(就是在文档里拖着图片动来动去的,看对应的哪些参数变了)
前两个参数不用理,第三个是从左往右第几列的所在位置,索引从0开始,所以这里的11就表示L列,刚好对应我需要的那列的所有图片
后两个参数分别为图片左边距离单元格的距离和图片顶部距离单元格顶部的距离,这两个参数没什么用
我们只需要写一个正则去匹配图片的url,且筛选条件为该图片所在的单元格在第12列
(PS:因为我是直接复制json到文件,所以并不会有http请求接口这个操作)
先导入库
1import re
2import requests #用于下载图片
3
4headers = {'User-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
5
6json_data=open("json.txt","r",encoding="utf-8")
7result=json_data.read()
8all_pic=re.findall(r""https://qqadapt.qpic.cn/(.*?)",(.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?),",result)
(无脑*,别骂了别骂了)
因为前面我解压过xlsx,所以知道图片有多少个,直接循环就好了
1...
2for i in range(1,636): #循环1-635
3 if all_pic[i][3]=="11": #判断是否在第12列
4 #print("图片URL:https://qqadapt.qpic.cn/"+all_pic[i][0])
5 url="https://qqadapt.qpic.cn/"+all_pic[i][0] # 拼合Url
6 imagefile = open(str(all_pic[i][4])+".png","wb") #写入文件
7 res=requests.get(url=url,headers=headers)
8 for shuju in res.iter_content(100000):
9 imagefile.write(shuju)
10 imagefile.close()
11
12 print("当前图片的顺位为: "+str(all_pic[i][4]))
最终效果
文件名便以该图片在这一列的第几行为命名了,这样后期我ocr写入xlsx后会更方便排序
最后吧啦几句
在操作到写入xlsx这部分的时候,真的是非常气,也不禁感叹百度垃圾,10篇文章里6篇都是复制粘贴
实在是不想用无脑for循环进列表里,在单独写xlsx,所以百度找了好久的文章
一开始找读取xlsx的文章,看见第一个库,然后找写xlsx的文章,看到了第二个第三个,后来就百度一次就看到用一个新的库,程序还没开始写,库已经安装了七八十个,一个操作一个库,真有你的
后来看到灏神的想法
索性xlsx追加的方法我就用下面这种了
1def write_xlsx(i,num):
2 workbook = openpyxl.load_workbook('result.xlsx')
3 sheet0 = workbook['Sheet1']
4 where="A"+str(i)
5 sheet0[where] = str(num[len(num)-1])
6 workbook.save('result.xlsx')
用覆盖的方式去写
原文始发于微信公众号(E条咸鱼):腾讯文档图片抓取
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论