最近,需要爬取猫眼的专业评分数据,因为猫眼的专业评分都是经过加密的,很难直接爬取,总的几个方案。
一,就是利用大量的爬取猫眼奇怪的符号,通过规律来破解,找了网上很多资料,后来一看,全是方框.方框,直接放弃
二,利用python的图片图例功能,爬取专业评分的图像,然后二值化,再转化为矢量,来训练模型,通过svm来分类,听过程就知道,很麻烦,但是训练结果集肯定很好,因为不像手写数字那么麻烦。
三,利用pyhon自带的识别二维码的库,但在这过程中也出现了很多bug,搞了好久,网上找各种资料,七拼八凑,很多都只是一点点,所以自己写个完整的,望后来人少走弯路
前提是要有PIL,selenium那个简单,就不说了,这两个都能直接用pip下载,坑的是下一个
一.安装pytesseract
直接用pip命令,pip install pytesseract
二. 安装tesseract-ocr
这个直接解压到默认位置就行了
三. 查看路径
看看C:/ProgramFiles (x86)/Tesseract-OCR/tesseract.exe这个目录下有没有
四. 修改配置文件
在python的安装目录下有个lib包,Lib\site-packages\pytesseract顺着这个路径找下去会出现这个pytesseract.py,点开,找到
把tesseract的路径改成刚刚查看的路径
五,代码
#!/usr/bin/python # -*- coding:utf-8 -*- from selenium import webdriver from PIL import Image import datetime from pytesseract import * driver = webdriver.Firefox() # 创建webdriver对象 url = "http://piaofang.maoyan.com/movie/248683?_v_=yes" # 定义目标url driver.get(url) # 打开目标页面 # 定义截图函数 def snap_shot(url, image_path, scroll_top=90): # 打开页面,窗口最大化 driver.get(url) driver.maximize_window() # 调用JS脚本滚动页面 scroll_js = "var q=document.documentElement.scrollTop={}".format(scroll_top) driver.execute_script(scroll_js) # 截图存储 driver.save_screenshot(image_path) # 定义抠图函数 def crop_image(image_path, crop_path, scroll_top=90): # 根据xpath来获取页面元素及其位置、尺寸,我这里是自己定义的,你可以跟你你电脑的分辨率自己调整 # element = driver.find_element_by_xpath(pattern_xpath) # location = element.location # size = element.size # 计算抠取区域的绝对坐标 #这个左是截的图理你的整个浏览器屏幕的上下左右,自己的调整,我的电脑分辨率是这样的 left = 290 top = 150 right = 450 bottom = 180 print (left,top,right,bottom) # 打开图片,抠取相应区域并存储 im = Image.open(image_path) im = im.crop((left, top, right, bottom)) im = im.convert('L') # # 这些处理过程不需要了,加了的话反而识别不出来 # box = (8, 6, 39, 25) # region = im.crop(box) # # region.show() # threshold = 140 # 阈值设为200 # table = [] # for i in range(256): # if i < threshold: # table.append(0) # else: # table.append(1) # out = region.point(table, '1') # out.show() # out.save("snap_shot/train/digit_2.png") #直接保存 im.save(crop_path) # 获取当前时间戳 now = datetime.datetime.now() now_sign = str(now.day)+str(now.hour)+str(now.minute)+str(now.second) # 启动截图函数,获取当前页面 snap_shot_path_1 = "snap_shot/maoyan_{0}_{1}.png".format('1', now_sign) snap_shot(url, snap_shot_path_1, scroll_top=0) # 启动抠图函数 pattern = "/html/body/div[2]/div/section[1]/div[1]/div[2]/div[2]/p[5]" crop_path = "snap_shot/crop/current_piaofang7.png" crop_image(snap_shot_path_1, crop_path, scroll_top=0) #到这里,抠图过程完成,接下来就是验证看shownum.py
#!/usr/bin/python # -*- coding:utf-8 -*- from selenium import webdriver from PIL import Image import datetime from pytesseract import * def shownumber(): im=Image.open('snap_shot/train/current_piaofang7.png') im.show() print(pytesseract.image_to_string(im)) if __name__ == '__main__': shownumber()
对了,再下载一个火狐浏览器,下面是结果图