首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python实时监控微博更新

一、思路整理

写了上篇文章“如何用Python编程实时监控币种拉盘或砸盘行为”之后,发现公信宝的拉盘每次都提前在微博告知,如下图

而且第三次回购竟然持续两天时间,那如果能及时收到微博通知就又多了一手消息。但又不可能随时盯着微博,就想怎么用python来实时监控微博新内容。

谷歌下,大部分给出的方案是先用python模拟登陆移动版微博m.weibo.cn,然后从自己的关注列表或关注用户的UID来获得内容。但是我搞了好几次,花了几小时都没搞定。主要原因是搜索的文章基本都在3月之前,而微博的防爬虫功能会越来越完善,导致很多原来的方法失效。

试了下他的代码,运行下来没错误,太好了,我可以从中借鉴了。非常感谢作者公众号:编程思考。

借鉴他的方法,先爬取微博的内容。之后我就可以在此基础上编程实现自己想要的功能。

二、抓取微博内容

用移动端网页打开要监控的微博主页,比如我要监控的公信宝的主页为https://m.weibo.cn/u/5598561921?uid=5598561921&luicode=10000011&lfid=100103type%3D1%26q%3D%E5%85%AC%E4%BF%A1%E5%AE%9D。打开之后按F12调出开发者工具network选项卡,Hide data URLS打勾,选择 XHR,找到与微博内容相关的信息,发现藏在getIndex?uid=5598561921下面,而且每次往下加载时会出现一个新的选项卡,我们监控新内容,只要第一页就行了。

然后点击headers,找到我们所需要的内容Request URL,获取方式为requests.get,User-Agent,复制下来

这样通过以下几条我们就可以获取公信宝首页的数据,需要对内容进行处理。

importrequests

importjson,time,datetime

user_agent ='Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Mobile Safari/537.36'

header = {'User-Agent': user_agent}# 不用要cookie就行

# 用户公信宝

XHRUrl ='https://m.weibo.cn/api/container/getIndex?uid=5598561921&luicode=10000011&lfid=100103type%3D1%26q%3D%E5%85%AC%E4%BF%A1%E5%AE%9D&containerid=1076035598561921'

r = requests.get(XHRUrl,headers=header)

# print(r.text)

json_str = r.text# 全部数据

dict_ = json.loads(json_str)# 转化为json格式

接下来就是怎么样找到我们想要的微博内容。

点击Preview,一项一项展开,我们看到有10条很整齐的数据:

再对每个数据条进行展开,比如点击0,我们发现有个“text”与微博内容对应,那通过对字典数据的处理,找到这个内容就行了。

n =1# 打印条数用

# 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值

WB_text_List = []# 微博内容列表

forindex,cardinenumerate(dict_['data']['cards']):

ifdict_['data']['cards'][index]['card_type'] ==9:#

}

headers = {"Content-Type":"application/json ;charset=utf-8 "}

url ='https://oapi.dingtalk.com/robot/send?access_token='+ robot_id

body = json.dumps(msg)

status = requests.post(url,data=body,headers=headers)

ifstatus.status_code ==200:

returnstatus.json()

# else:

# return response.json()

returnstatus

exceptExceptionaserr:

print('钉钉发送失败',err)

user_agent ='Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Mobile Safari/537.36'

header = {'User-Agent': user_agent}# 不用要cookie就行

# 用户公信宝

XHRUrl ='https://m.weibo.cn/api/container/getIndex?uid=5598561921&luicode=10000011&lfid=100103type%3D1%26q%3D%E5%85%AC%E4%BF%A1%E5%AE%9D&containerid=1076035598561921'

r = requests.get(XHRUrl,headers=header)

# print(r.text)

json_str = r.text# 全部数据

dict_ = json.loads(json_str)# 转化为json格式

n =1# 打印条数用

# 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值

WB_text_List = []# 微博内容列表

forindex,cardinenumerate(dict_['data']['cards']):

ifdict_['data']['cards'][index]['card_type'] ==9:# {card_type: 9, 是9下面才有内容

# print(dict_['data']['cards'][index]['mblog']['id']) # 每条微博的ID

text = dict_['data']['cards'][index]['mblog']['text']# 每条微博的内容

text = text.split(')[]# 发现内容比较混杂,使用split分割字符串,隔开之后文字在新的list中第一个, 暂时去除图片

created_at = dict_['data']['cards'][index]['mblog']['created_at']# 每条微博的发布时间

# print(n, text)

print(n,created_at,text)

WB_text_List.append(text)# 当前内容列表

n = n +1

while True:

try:

r = requests.get(XHRUrl,headers=header)# 使用.format()把用户id和页数倒进去

json_str = r.text# 全部数据

dict_ = json.loads(json_str)# 转化为json格式

n =1# 打印条数用

forindex,cardinenumerate(dict_['data']['cards']):

ifdict_['data']['cards'][index]['card_type'] ==9:# {card_type: 9, 是9下面才有内容

# print(dict_['data']['cards'][index]['mblog']['id']) # 每条微博的ID

text = dict_['data']['cards'][index]['mblog']['text']# 每条微博的内容

text = text.split(')[]# 发现内容比较混杂,使用split分割字符串,隔开之后文字在新的list中第一个, 暂时去除图片

created_at = dict_['data']['cards'][index]['mblog']['created_at']# 每条微博的发布时间

if not(textinWB_text_List):

print('新微博',text,sep='\n')

content ='新微博'+'\n'+ text

send_msg1 = send_dingding_msg1(content)

print(send_msg1)

n = n +1

time.sleep(5)

exceptExceptionaserr:

print("查询出错",err)

time.sleep(1)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190629A0182X00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券