微博热搜读取(二)

作者: ATangYaaaa | 来源:发表于2018-06-12 04:21 被阅读0次

    仿照上个例子的做法,用python截屏加上tesseract文字识别,读取新浪微博热搜榜内容并保存到文本。

    图一 微博热搜榜

    python截取全屏,然后细分ROI区域进行逐一识别,直接贴代码吧:

    # -*- coding:utf-8 -*-

    import cv2

    import win32gui, win32ui, win32con, win32api

    import os

    def window_capture(filename):

      x=0

      y=0

      w=1920

      h=1080

      hwnd = 0

      hwndDC = win32gui.GetWindowDC(hwnd)

      mfcDC = win32ui.CreateDCFromHandle(hwndDC)

      saveDC = mfcDC.CreateCompatibleDC()

      saveBitMap = win32ui.CreateBitmap()

      saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)

      saveDC.SelectObject(saveBitMap)

      saveDC.BitBlt((x, y), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)

      saveBitMap.SaveBitmapFile(saveDC, filename)

    window_capture("window_capture.jpg")

    img=cv2.imread("window_capture.jpg",cv2.IMREAD_GRAYSCALE)

    ROI=img[501:951,540:1210]

    cv2.imshow("OCR_data",ROI)

    cv2.waitKey(0)

    cv2.imwrite("OCR_data.jpg",ROI)

    for i in range(1,11):

        Top10=ROI[(i-1)*45:i*45,100:500]

        cv2.imshow("Topic",Top10)

        cv2.waitKey()

        cv2.imwrite("Top10.jpg",Top10)

        os.system("tesseract Top10.jpg Top10 -l chi_sim+eng")

        f=open("out.txt","a")

        g=open("Top10.txt","r")

        content=g.read()

        f.write(content)

        g.close()

        f.close()

    下面是截取的主ROI,需要识别的内容都包括在里面:

    图二 ROI截取内容

    下面是分段截取的图片:

    图三 每个Item截取内容

    下面是文本文件保存的数据:

    图四 保存的文本内容

    可以看出,大部分的爬取效果都比较不错,唯独少部分数据可能会存在误判,不影响我们从宏观上取看整个网络流行趋势关注点的性质内容。这里截图时坐标定位是个非常麻烦的问题,如果不是因为在学习python的openCV模块,截图部分用扣扣截图简直不能太easy。注意图中的图其实不是属于感兴趣内容,数据清洗时要洗掉,还有无意义的几个误判英文。

    总的来说,来时做成了一件事情。但是是一种比较笨拙的方法,花时间较长而且识别效果也不好。

    但是这里引入了文本识别的基本方法,tesseract是python非常友好的识别工具,其还提供字体训练的一系列方案,日积月累的字体建库可以实现个人手写体的识别,是一种非常值得学习的事物。

    相关文章

      网友评论

        本文标题:微博热搜读取(二)

        本文链接:https://www.haomeiwen.com/subject/uxnkeftx.html