小篆汉字对比数据库

小篆汉字对比数据库

骨刻文字数字化识别与归类系统项目


前言

本次项目实训的内容是骨刻文字数字化识别与归类系统,第一个任务是建立小篆和甲骨文的汉字对比数据库为后续骨刻文字识别归类提供基础


提示:以下是本篇文章正文内容,下面案例可供参考

一、小篆汉字对比库来源及提取思路

使用篆书在线转换器https://www.zhuanshuti.cn/

网页样貌
使用Selenium+Chromedriver模拟浏览器操作浏览网页,同时检查网页代码了解页面结构,模拟选中方正小篆体,按字典顺序输入现代汉字,缓存生成图片到本地mysql,存储成为现代汉字的属性

二、具体实现步骤及代码

1.引入库

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

2.打开无头浏览器

browser = webdriver.Chrome(executable_path=r'D:\Google\Chrome\Application\chromedriver.exe') #如果打开这行浏览器就说明驱动成功了
browser.get('https://www.zhuanshuti.cn/')

这里犯了一个错误,起初()里未填路径使用了默认参数,导致报错只能使用84版本的Chrome,结果下载了多个版本的Selenium才发现是执行路径参数问题


3.模拟,自动化爬取

#导入库
import time
import win32api
import win32con
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

#创建浏览器对象, 同时打开浏览器
browser = webdriver.Chrome(executable_path=r'D:\Google\Chrome\Application\chromedriver.exe') #如果打开这行浏览器就说明驱动成功了
browser.get('https://www.zhuanshuti.cn/')

#最大化浏览器窗口
browser.maximize_window()


#输入汉字啊
num = 1
username = browser.find_element_by_id('text')
username.send_keys('啊')#输入汉字
browser.find_element_by_class_name('btn.btn-primary.submit').click() #点击

#鼠标定位到图片,并下载图片
VK_CODE ={'enter':0x0D, 'down_arrow':0x28}
#定义按下键盘事件
def keyDown(keyName):
    win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)

#定义松开键盘事件
def keyUp(keyName):
    win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0)

image=browser.find_element_by_xpath('//*[@id="SaveImg"]')#定位图片所在的元素
action = ActionChains(browser).move_to_element(image)
action.context_click(image).perform()#在图片元素上执行右键单击操作
time.sleep(1)#防止图片未加载出来
win32api.keybd_event(86, 0, 0, 0)#调用按下键盘函数,为函数传入参数“86”,也就是“v”
win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)#松开键盘“V”
time.sleep(1)#等待一秒
keyDown('enter')#按下“确认”按钮
keyUp('enter')#松开确认按钮
time.sleep(1)#等待一秒
print("图片下载完成")

这里是原思路代码实现,途中遇到了如下问题:
1.selenium无法实现浏览器外的操作,如下载图片到指定路径
解决方案:使用win32api,模拟键盘,由无头浏览器模拟鼠标右击图片,win32api模拟按下v保存和回车确定
2.无头浏览器实现太过缓慢,如果sleep()时间过短可能图片未加载完成,但汉字字典超过两万个,爬取时长过长,而服务器和GPU老师还没有分配。
解决方案:爬接口,不用自动化爬取

4.爬接口

import urllib.request
final={}
with open("dict.txt", "r",encoding='utf-8', errors='ignore' ) as f:  # 打开文件
    tt_init = f.read()  # 读取文件
    tt=list(tt_init)
    for i in tt:
        if i=='\n':
            tt.remove(i)
    print(tt)
length=len(tt)
index=1
for num in range(length):
    a=tt[num]
    tt[num]=tt[num].encode('utf8')
    tt[num]=str(tt[num]).replace(r'\x','%')
    tt[num] = tt[num].lstrip('b')
    tt[num]=tt[num].strip('\'')
    print(tt[num])
    url = 'https://www.zhuanshuti.cn/image.png?fsize=30&font=fangzhengxiaozhuanti.ttf&text={}&mirror=no&color=111&vcolor=111&bgcolor=fff&alpha=no&output=png&spacing=4&shadow=no&transparent=no&icon=no&iconic=&top_spacing=5&left_spacing=6&icon_size=48'.format(tt[num])
    with urllib.request.urlopen(url) as fp:
        content=fp.read()
        if(b'imagecreatetruecolor()' not in content):
            with open(f'.\\result\\{index}.jpg','wb') as ifp:
                final[a] = index
                ifp.write(content)
                with open(f'.\\chart.txt','a') as ifp2:
                    ifp2.write(a+':'+str(index)+'\n')
                index=index+1

这里分析目标网页图片接口,发现安全措施很差,只要在URL中将参数text换成想要查询的关键字就可以了,然后循环爬取字典中每个字的小篆图片,写入result文件夹,同时将汉字和小篆图片的对应映射记录到TXT文件中

4.结果

在这里插入图片描述
在这里插入图片描述
PS:这里要吐槽一下CSDN上买的字典库————无良奸商——————夹带私货
会员你妹啊
中间有一段甚至是加好友啥的推销广告,害得我得再次处理

总结

通过上述方法完成了爬取工作,接下来就是部署到指定服务器的数据库上,接下来先学习山大云的使用方法,配置环境,以及寻找提取归类古文算法

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值