事情原由

由于本人之前在一家网约车公司做新媒体运营。公司旗下有四十多个驾驶员,每个驾驶员一台车,每台车每天都会运送很多乘客。这些乘客坐了车,我们为了留存客户,就需要让这些乘客关注公司的公众号。

于是用到了微信公众号第三方平台的一个渠道二维码功能,简单的来说也就是可以统计司机每天推荐了多少人关注公众号的一个二维码。

但是吧,这个二维码能统计单个驾驶员的,却没有一个整体的报表。每次都需要人工的把四十多个驾驶员的数据整理到Excel表中,然后提交给公司看。

每天都要做这种枯燥且无聊的事情,于是我想到了用python!

分析需求

首先,我所用到的公众号第三方后台是:微助软件。然后我们进入[渠道二维码]应用界面。

image-20210104124342030

从这里就可以看到,如果需要查看每个人当天的数据就需要点入[关注趋势]界面。然后我们可以从这个列明分析出,每个驾驶员的ID是多少。下方还有分页。

然后我们进入[关注趋势]页面。
image-20210104124500715

很明显,这几个数据就是我想要的数据。

思路整理

经过上面的分析,思路就很明显了。首先,我们带着cookies抓取驾驶员列报页面。提取驾驶员ID,然后带着ID访问关注趋势页面,爬取我们所需要的数据,然后对数据进行整理!

实现代码

from datetime import date, timedelta
import re
import requests
from lxml import etree



class auto_weixin():
    # 如果获取失败,需要更新cookis。

    def __init__(self):
        self.headers = {
            'Cookie': '****', #cookis
        }

    @staticmethod
    def handle_info_str(dict_num):
        # 处理拼接字符串格式
        list_str = '姓名:{0}\n昨日增长:{1}\t昨日取消:{2}\n\n'.format(dict_num[0], dict_num[1], dict_num[2])
        return list_str

    def auto_push_weixin(self, text):
        # 推送内容到微信
        data = {
            'corpid': '***',
            'corpsecret': '***',
            'agentid': '***',
            'text': text
        }
        r = requests.post('https://api.htm.fun/api/Wechat/text/', data=data)

    def get_info(self, tim_name, *args):
        # 获取昨天时间,因为我需要的是昨天的数据。
        yesterday = (date.today() + timedelta(days=-1)).strftime("%Y-%m-%d")
        # 爬取对应ID的数据
        info_text = tim_name + '\n' + yesterday + '扫码数据统计\n'
        # 爬取所有id
        for i in args:
            print('正在获取ID为:{0}的数据,请稍等!'.format(i))
            r = requests.get(
                'https://www.r8.sdsdsoft.com/web/index.php?c=site&a=entry&op=subscribe&type=list&qrcode_id={0}&channel_assgin_id=0&do=erweicode&module_name=wechatnu_group'.format(
                    i), headers=self.headers).text
            html = etree.HTML(r)
            # 选择所需要的数据,通过xpath选取昨天的数据,昨日增长和取消
            num = html.xpath(
                '/html/body/div[@class="center-detail-top"]/span/span/text()[2]|/html/body/table/tbody/tr[2]/td[3]/a/text()|/html/body/table/tbody/tr[2]/td[4]/a/text()')
            #           # 处理第一个数据,截取出车牌号
            num[0] = re.findall('场景:(.*)\xa0\xa0\xa0分组', num[0])[0]
            # 返回数据,list类型
            info_text += self.handle_info_str(num)
        self.auto_push_weixin(info_text)


if __name__ == '__main__':
    r = auto_weixin()
    r.get_info('重庆团队', 149, 142, 141, 140, 139, 137, 136, 135, 134, 133, 129, 127, 123)
    r.get_info('万州电动车', 153, 151, 148, 146, 138, 132, 131, 130, 128, 126, 125, 124, 122, 120, 119, 118, 117)
    r.get_info('万州商务车', 159, 158, 150, 152)

这里看代码,我没有去遍历ID而去自动爬。是采用了人工填写ID的方式。是因为有些ID我不需要,因为还有其他地推人员,所以采用了这种手动分类。

最后修改:2021 年 01 月 05 日 08 : 48 AM
如果觉得我的文章对你有用,请随意赞赏