轻便爬虫+OCR 第二部分

标签: python  图像识别

新年快乐,武汉加油

第三步:爬虫

爬虫的思路:通过提供的网址,爬下网址源码,接着于源码中遍历,找寻所有的图片并下载。

爬下源码

运用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)

最后于子窗口弹出可复制的信息框。
小白为了做毕设的时候能够更加简便快捷,所以闲暇时间鼓捣了一番,源码比较凌乱,往后有时间我会整理一下分享出来。
新的一年,祝大家事事顺利,开心快乐,武汉加油。

版权声明:本文为chunqingzhanna原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chunqingzhanna/article/details/104082593