猫眼爬取专业评分的python

    最近,需要爬取猫眼的专业评分数据,因为猫眼的专业评分都是经过加密的,很难直接爬取,总的几个方案。

    一,就是利用大量的爬取猫眼奇怪的符号,通过规律来破解,找了网上很多资料,后来一看,全是方框.方框,直接放弃

    二,利用python的图片图例功能,爬取专业评分的图像,然后二值化,再转化为矢量,来训练模型,通过svm来分类,听过程就知道,很麻烦,但是训练结果集肯定很好,因为不像手写数字那么麻烦。

    三,利用pyhon自带的识别二维码的库,但在这过程中也出现了很多bug,搞了好久,网上找各种资料,七拼八凑,很多都只是一点点,所以自己写个完整的,望后来人少走弯路

   

   前提是要有PILselenium那个简单,就不说了,这两个都能直接用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()
对了,再下载一个火狐浏览器,下面是结果图

阅读更多
换一批

没有更多推荐了,返回首页