目标

  1. 批量下载目标网页中的所有图片
  2. 对下载的图片批量进行OCR识别
  3. 识别内容放入txt文件中

使用工具

  • PyCharm 2022.1.3
  • Tesseract-OCR

下载Tesseract-OCR

Home · UB-Mannheim/tesseract Wiki · GitHub

安装包的下载位置

安装后设置环境变量

环境变量设置

使用的库

requests 发送Http/Https请求
re 使用regular expression进行网页源代码的裁切
pytesseract 调用本地的Tesseract-OCR
from PIL import Image 打开图像文件

批量下载图片

getAllPictureInPage.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import requests
import re

url = 'https://pan-yz.chaoxing.com/screen/file_c4023927829f34c0a0e612ff81b164ff?ext=%7B%22_from_%22%3A%22219768180_62367961_217069448_f99dbc4432815ba06be5646cef8ea68a%22%7D&hideWeixinOptionMenu=true'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.43'
}

resp = requests.get(url, headers = headers)
resp.encoding = 'utf-8'

page_content = resp.text

regObj1 = re.compile(r'#F1F3F4;.*?"width:100%;">(?P<urls>.*?)</div>', re.S)
regObj2 = re.compile(r'<img src="(?P<srcs>.*?)" style="width:100%;', re.S)
result1 = regObj1.finditer(page_content)

for it in result1:
urls = it.group('urls')
# print(urls)
result2 = regObj2.finditer(urls)
for itt in result2:
src = itt.group("srcs")
# print(src)
img_resp = requests.get(src)
img_name = src.split("/")[-1]
with open("./Pics/"+img_name,mode="wb") as f:
f.write(img_resp.content)
print("over!",img_name)

print("All over!!")

执行后会在当前目录下创建Pics文件夹

Pics文件

OCR批量识别代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pytesseract
from PIL import Image

if __name__ == '__main__':
for i in range(1,137):
filename = "./Pics/"+str(i)+".png"
text = pytesseract.image_to_string(Image.open(filename), lang="chi_sim")
# 如果你想试试Tesseract识别中文,只需要将代码中的eng改为chi_sim即可
# print(text)
with open('./readme.txt', 'a') as f:
f.write(text)
f.write("\n")
print(str(i)+".png success!")

执行后会在当前目录下生成readme.txt文件

reanme.txt文件

其中比较重要的点

re模块的使用

1
regObj1 = re.compile(r'#F1F3F4;.*?"width:100%;">(?P<urls>.*?)</div>', re.S)

(唯一)定位到

1
#F1F3F4;.*?"width:100%;">

1
</div>

中间的内容

并分组为命名为urls(因为只有一个所以这里说唯一定位)

1
result1 = regObj1.finditer(page_content)

使用regObj1对page_content内容进行查找

迭代后再使用group函数

1
2
for it in result1:
urls = it.group('urls')

就可以取出urls

open(‘./xxxx.txt’,’a’)

append而不是直接写write

write会覆写内容

注意

使用requests时加上 header,否则可能会被封IP

Refer

1 6 2 Requests入门-1_哔哩哔哩_bilibili

(29条消息) python之OCR文字识别_wu_zhiyuan的博客-CSDN博客_python 文字识别