新年快乐,武汉加油
第三步:爬虫
爬虫的思路:通过提供的网址,爬下网址源码,接着于源码中遍历,找寻所有的图片并下载。
爬下源码
运用request库相关函数:
#爬下源码
def pachong(self):
# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
#params = kw,
response = requests.get(self.URL, headers=gHeads)
#
# # 查看响应内容,response.text 返回的是Unicode格式的数据 返回是网页数据
# #print(response.text)
#
# # 查看响应内容,response.content返回的字节流数据
# #print(response.content)
#self.txt = response.content.decode("utf-8")
self.bianma = response.encoding
self.txt = response.content.decode("%s" %response.encoding)
self.txt = self.txt.encode('GBK','ignore').decode('GBK')
print(response.content.decode("%s" %response.encoding))
# # # 查看完整url地址:贴吧被替换后的URL
# #print(response.url)
# # # 查看响应头部字符编码 :utf-8
#print(response.encoding)
# # # 查看响应码
# #print(response.status_code)
#储存到指定的txt
def lay(self):
#print (self.txt)
file = open(self.LAY_way,mode='w')
file.write(self.txt)
file.close()
messagebox.askokcancel('消息框', '储存成功了')
这是某个博客的源码,需要注意的是:text返回的是unicode格式的数据,若要写入txt中需要改变格式,同时忽略一部分歧义字符,否则报错。
遍历源码、下载图片
遍历爬下的源码,找寻图片的链接,利用re库书写正确的正则表达式进行匹配。
于网页的开发者模式下可以看到网址源码,或者通过上个步骤储存的txt,ctrl+f搜索src便可看到:
点开src后的链接,于浏览器上发现可以正常使用,说明这是我们要爬下的图片之一。
#下载图片
def download_photo(self):
reg = r'src="(.+?\.jpg)"'
reg_img = re.compile(reg)
imglist = reg_img.findall(self.txt)
i = 0
for img in imglist:
print(img)
i += 1
urlretrieve(str(img),'./image/%s.png' %i)
urlretrieve函数用于下载,跟随参数是链接与名称。
短时间内多次访问下图可能会因反爬手段被禁止反问,构建自己的代理池,请求头是一个不错的方法。此外,每个网站储存图片的方式并不一样,该手段仅能爬取一下小网站的图片,个人感觉得到新鲜感是最棒的收获。
第四步 OCR
做图像文字识别,一是自己动手写,二是利用现成的百度AI的OCR技术,本小白不加多想便选择了后者。
首先登陆百度AI :https://ai.baidu.com/
进入应用界面,创建应用
文字识别是默认勾选的,创建完后,需要保存APP_ID 、API_Key 、Secret_Key,于pycharm导入AipOcr。
APP_ID = 'xxxx'
API_Key = 'xxxx'
Secret_Key = 'xxxx'
client = AipOcr(APP_ID,API_Key,Secret_Key)
配置完毕后,与百度AI的链接的前提便做好了。
做截图配置的时候,本着越简便越好,初始思路便是,鼠标摁下时记录坐标,拖动弹起时记录坐标,划定区域后截图再上传辨识。可惜pywin32一直装载失败,无奈另觅它路。翻阅一篇CSDN博客时,它介绍了一个很好的方法,利用snipaste截图,同时利用keyboard库监听按键,再将截下的图从粘贴板上取下上传,确实合理。
#截取图片
def before_cut_photo(self):
keyboard.wait(hotkey='f1')
keyboard.wait(hotkey='ctrl+c')
time.sleep(0.1)
image = ImageGrab.grabclipboard()
image.save('./result_of_photo.png')
a = './result_of_photo.png'
self.image2text(a)
#识别图像
def image2text(self,fileName):
#fileName = './background/2.png'
with open(fileName, 'rb') as fp:
image = fp.read()
dic_result = client.basicGeneral(image)
res = dic_result['words_result']
result = ''
for m in res:
result = result + str(m['words'])
print(result)
file = open('./result_of_photo.txt',mode='w')
file.write(result)
file.close()
messagebox.askokcancel('消息框', '储存入result_of_photo中')
messagebox.askokcancel('识别文本', '%s' %result)
top = tk.Toplevel()
top.title('识别文本')
msg = tk.Text(top)
msg.pack()
msg.insert(tk.INSERT,'%s'%result)
最后于子窗口弹出可复制的信息框。
小白为了做毕设的时候能够更加简便快捷,所以闲暇时间鼓捣了一番,源码比较凌乱,往后有时间我会整理一下分享出来。
新的一年,祝大家事事顺利,开心快乐,武汉加油。