教你如何软饭硬吃-【原创】

一、项目介绍

女朋友平时没事吧,爱炒股,关键还是那种逢买必亏的炒,我就问她为啥人家炒股都是赚,你咋每次都是亏捏?她说,她最近跟着一个微博博主买票,但是每次博主买或卖的时候,她都总是慢半拍,要么买晚了,要么卖晚了,作为一名程序员,那绝对不能忍啊,键盘一挥,这就准备手撸代码,实时监控微博(秒级监控),进行实时通知。

二、核心技术

2.1 爬虫

  1. 获取uid

点击你要跟踪的微博用户,点击之后你就会在搜索栏看到用户的uid,把uid存起来,这个是我们要查询博主的博客内容必要条件

  1. 爬虫获取用户微博最新内容,不废话,直接上代码:
def get_weibo(uid):
    try:
        weibo_url = f'https://m.weibo.cn/api/container/getIndex?from[]=page_100505_profile&from[]=page_100505_profile&wvr[]=6&wvr[]=6&wvr[]=6&mod[]=data&mod[]=data&mod[]=data&is_all[]=1%3Ffrom%3Dpage_100505_profile&is_all[]=1&is_all[]=1&jumpfrom=weibocom&containerid=107603{uid}&page=1'
        weibo_result = requests.get(url=weibo_url).json()
        news = weibo_result['data']['cards'][1]
        if news['mblog'].get('source') == '生日动态':
            news = weibo_result['data']['cards'][2]
    except Exception as e:
        traceback.print_exc()
        time.sleep(random.randint(3, 8))
        return
    print(f"查询内容:{news['mblog']}")

2.2 实时监控

这里采用celery定时任务进行微博监控,我是每5秒触发一次查询操作。(celery文档:https://docs.celeryq.dev/en/stable/

配置代码如下:

celery.conf.beat_schedule = {
    'get_weibo_data': {
        'task': 'app.get_weibo_data', # 你的定时任务
        'schedule': timedelta(seconds=5), #每5秒执行一次
        'args': ()
    },
}

2.3 触发通知

在获取每次爬取到的数据时,我都会根据返回的数据中自带的消息ID进行判重操作,一旦发现是全新的ID,我就会触发接下来的通知操作。

如何发送通知,有很多种方法,我这里是使用的是钉钉通知

A.首先创建一个钉钉群,找到群智能助手

B.添加机器人

C.找到自定义

D.进去之后点击设置,这里你可以设置机器人的名字,和通知关键词,即你要通知的文本中要有关键词才会触发通知,这里要注意


E.到这里你就会获取一个回调地址:

F.接下来的操作就很简单了,直接上代码:

from dingtalkchatbot.chatbot import DingtalkChatbot
xiaoding = DingtalkChatbot(webhook)
def send_data(news):
    xiaoding.send_text(
    msg=f"微博通知:【{news['mblog'].get('user', {}).get('screen_name')}】---【{news['mblog'].get('created_at')}】---【{news['mblog'].get('text')}】---消息链接: https://weibo.com/u/{uid}?is_all=1",
)
    if news['mblog'].get('original_pic'):
        xiaoding.send_image(pic_url=news['mblog'].get('original_pic'))

看下通知效果吧:

完美!!!

2.4 部署

如何让程序从本地快速在云上部署运行呢?很显然,docker帮我们解决了大忙,不废话,直接上dockerfile代码:

FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8

RUN apt-get update
RUN apt-get install -y python3 python3-pip redis curl vim openssh-server supervisor mysql-server dos2unix libmysqlclient-dev
#RUN sudo apt-get install -y libmysqlclient-dev

RUN redis-server &
RUN mkdir -p /home/lee
COPY ./flask-celery-example-master /home/lee/flask-celery-example-master
# 更新supervisor配置文件
COPY ./flask-celery-example-master/supervisor/supervisord.conf /etc/supervisor/supervisord.conf
COPY ./flask-celery-example-master/supervisor/conf.d/*.conf /etc/supervisor/conf.d/
RUN cd home/lee/flask-celery-example-master
RUN pip install -r /home/lee/flask-celery-example-master/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# CMD
#CMD bash
CMD ["sh", "/home/lee/flask-celery-example-master/ServiceStart.sh"]

我是直接把本地容器直接打包,然后拷贝到服务器上,直接运行

2.5 总结

A.通过微博主页获取用户uid

B.使用爬虫获取用户微博内容

C.使用celery进行重复请求,根据微博ID进行判重触发钉钉通知

D.项目采用flask框架进行编写,docker进行部署

最后

更多Python知识尽在【Python都知道】公众号,欢迎大家!!
扫描下方二维码,关注公众号,了解更多Python内容


小白学堂 » 教你如何软饭硬吃-【原创】

就聊挣钱,一个带着你做副业的社群。

立即查看 了解详情