史上最快、最笨的公众号文章[阅读数、在看数]采集,哈哈

史上最快、最笨的公众号文章[阅读数、在看数]采集,哈哈_第1张图片
先前写过一篇《Python爬虫实践:如何快速、高效的爬取微信公众号阅读在看》的文章,里面介绍了四种公众号阅读数、在看数的采集方法,分别是:

第一种:使用第三方的平台获取 ​
第二种方法:使用PC端模拟点击; ​
第三种:使用第三方工具; ​
第四种:基于微信公众号平台的方式;

今天抽空把第二种方式实现了,把代码贴出来供大家参考。其中分为两个类,一个是模拟点击等操作的公共类;一个是具体执行模拟操作,进行数据采集的类。具体介绍如下:
开发环境

Python3.6+
源代码:

第一个类:模拟点击主类:

import time, random, pyperclip
from com.fy.plugs.mouse.pymouse.PyMousePlugs import PyMousePlugs

class CrawlerClickAndLook:
    def __init__(self):
        self.pmp = PyMousePlugs()
        print(self.pmp .x_dim, self.pmp .y_dim)
    
    def control(self, url):
        try:
            self.pmp.click(60, self.pmp .y_dim) #点击任务栏微信快捷方式;
            time.sleep(1)
            self.pmp.click(400, 480)#点击输入区,把鼠标置于输入状态;
            time.sleep(1)
            self.pmp.input(url)#输入链接
            time.sleep(1)#
            self.pmp.kb.tap_key(self.pmp.kb.enter_key)#回车,进行信息发送;
            time.sleep(1)
            self.pmp.click(600, 370)#打开连接
            time.sleep(random.randint(3, 6))#等待内容加载完毕
            
            self.pmp.kb.press_keys([self.pmp.kb.control_r_key, 'a'])#全选
            time.sleep(1)#
            self.pmp.kb.press_keys([self.pmp.kb.control_r_key, 'c'])#复制;
            time.sleep(1)#
            text = pyperclip.paste()
            if "阅读 "in text:
                index = text.index("阅读 ")
                click = text[index:]
                for kw in click.split("\n"):
                    if "阅读 " in kw:
                        print("阅读:", kw.replace("阅读", "").strip())
                    elif "在看" in kw:
                        print("在看:", kw.replace("在看", "").strip())
                        self.pmp.click(self.pmp .x_dim - 15, 15)#关闭详情页;
                        return 
            print(text)
        except:pass
       
if __name__ == '__main__':
    owc = CrawlerClickAndLook()
    owc.control("文章地址")

上面这个是主类,运行以后的结果如下图:
史上最快、最笨的公众号文章[阅读数、在看数]采集,哈哈_第2张图片
第二个类:模拟点击、键盘操作公共类:

from pymouse import PyMouse
from pykeyboard import PyKeyboard
import pyperclip 
from com.fy.utils.date.DateUtils import Date_Utils
class PyMousePlugs:
    def __init__(self):
        self.du = Date_Utils()
        self.pm = PyMouse()
        self.kb = PyKeyboard()        
        self.x_dim, self.y_dim = self.pm.screen_size() #–获得屏幕尺寸
    
    #向输入框中输入内容,解决了汉字无法输入的问题;
    def input(self, kw):
        pyperclip.copy(kw)#把待写入输入框的内容,添加到剪切板中;
        
        #以下语句模拟键盘点击ctrl+v
        print(self.du.getCurrentTimeStr()[11:] + "    模拟键盘点击ctrl+v\n")
        self.kb.press_key(self.kb.control_key)
        self.kb.tap_key('v')
        self.kb.release_key(self.kb.control_key)
    
    #点击
    def click(self, x, y):
        self.pm.click(x, y)#点击
    
    #多功能点击
    def clickMulti(self, x:"x轴坐标位置", y:"y轴坐标位置", button:"–1表示左键,2表示点击右键", n:"–点击次数,默认是1次,2表示双击"):
        self.pm.click(x, y, button, n)# –鼠标点击 

    #获取鼠标位置
    def option(self):
        return self.pm.position()
    
    #回车
    def enter(self):
        self.kb.tap_key(self.kb.enter_key)#回车,进行搜索

    #选择全部内容;
    def selectAll(self):
        self.pmp.kb.press_keys([self.pmp.kb.control_r_key, 'a'])#全选
        
    #选择并复制全部内容;
    def selectAndCopyAll(self):
        self.selectAll()
        self.pmp.kb.press_keys([self.pmp.kb.control_r_key, 'c'])#复制;

上面两个类,拷贝到Python开发工具中,可以直接运行,不过记得修改一下第一个类中click的x、y轴坐标点。
坐标点的确定很简单,按下“Ctrl+Alt+A”截屏时,不断变动的那两个数值即是x、y坐标轴位置。
注意事项:

1:由于是模拟点击,所以两次点击之间最好有等待间隔,如0.5秒;
​
2:环境受限。
  该种方法必须独占一台电脑,因为是模拟点击,所以不能有其他人使用;
​
3:速度受限。
​
4:该种方法可以结合FastAPI,对外提供接口,实时调用;
​
5:处理的URL受限。

一个微信号每天大概能处理8000个请求(不同环境下可能有差异),不适合大批量的实时处理。可以用于临时获取一批文章的阅读数;
微信公众号文章阅读数和在看数的采集,不管用的是那种方式,最后都是要走APP的接口,所以对采集的限制,也就是APP端的那些限制策略。如果想大批量,比如监测10万、50万、100万这种,还是需要相应的硬件和微信号的支撑的。

道高一尺魔高一丈,希望大牛们能够找到第五种、第六种方法。
史上最快、最笨的公众号文章[阅读数、在看数]采集,哈哈_第3张图片
基于微信PC端的文章阅读数、在看数的采集,大概就这么点东西,改天有空把第四种方式,想办法实现一下。

你可能感兴趣的:(数据采集)