Python实现微博关注用户、微博点赞和评论转发评论功能

鳄鱼君

发表文章数:531

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python教程 » Python实现微博关注用户、微博点赞和评论转发评论功能

Python玩转微博中,我么已经实现了自动采集和发布的功能,这里在此基础上实现关注用户、点赞和转发评论的功能。本质上都是寻找网站的URL请求。

关注用户

在微博中关注用户有两种方式:
(1)在用户的某条微博上,在将鼠标移到用户头像时所弹出的窗口中单击“关注”。
(2)在微博用户的首页单击“关注”。

两种关注方式的请求链接是一样的,区别在于请求参数的差异。鳄鱼君Ba通过第二种方式,那么在浏览器上捕捉其请求信息:

Python实现微博关注用户、微博点赞和评论转发评论功能

请求参数分析可得,参数uidlocationoidfnick是被关注用户的信息,暂时无法得知被关注用户信息的来源。其余的参数是固定不变的。

从该请求的响应内容分析可得,用户被关注成功之后,网站主要返回JSON数据。观察数据内容,可从“code”的值来判断是否关注成功。

进一步核实被关注用户信息的来源,以“oppo官方”的微博为例,分析查找浏览器在“oppo官方”的微博首页所捕捉的请求信息,最终在Doc标签找到该微博信息:

Python实现微博关注用户、微博点赞和评论转发评论功能

数据对比得出,参数uid、location、oid和fnick分别对上图的oid、location、oid和onick。代码参考:

import time
# 关注微博,session是用户登录后的会话,follow_url是关注用户的微博主页
def follow_weibo(session,follow_url):
    # 构造请求头
    headers = {
        "Referer": "https://weibo.com/eyujunBa/home?topnav=1&wvr=6",
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
    }
    follow_info={'oid':'','onick':'','location':''}
    res=session.get(follow_url,headers=headers)
    print(res.url)
    follow_info['oid']=res.text.split("$CONFIG['oid']=")[1].split(';')[0]
    follow_info['onick']=res.text.split("$CONFIG['onick']=")[1].split(';')[0]
    follow_info['location']=res.text.split("$CONFIG['location']=")[1].split(';')[0]
    # 关注URL,参数_rnd为时间戳
    url='https://weibo.com/aj/f/followed?ajwvr=6&__rnd=%s'% (str(int(time.time()*1000)))
    data={
       "uid":follow_info['oid'],
        "objectid":"",
        "f":"1",
        "extra":"",
        "refer_sort":"",
        "refer_flag":"1005050001_",
        "location":follow_info['location'],
        "oid":follow_info['oid'],
        "wforce":"1",
        "nogroup":"1",
        "fnick":follow_info['onick'],
        "refer_lflag":"0000015010_",
        "refer_from":"profile_headerv6",
        "template":"7",
        "special_focus":"1",
        "isrecommend":"1",
        "is_special":"0",
        "redirect_url": "%2Fp%2F1005056776904710%2Fmyfollow%3Fgid%3D4296425330676196%23place",
        "_t":"0",
    }
    r=session.post(url,data=data,headers=headers)
    # 判断是否关注成功
    if r.json()['code']=='100000':
        print('关注成功')
        return (follow_info['onick'] + '关注成功')
    else:
        return (follow_info['onick']+'关注失败')

将以上代码存放在文件weibo_follow.py中,代码解释:
(1)函数follow_weibo的参数分别是带有用户信息的会话对象和被关注的微博首页链接。
(2)重新构建请求头,主要在发送关注用户的请求时所使用。
(3)访问被关注用户的首页,获取被关注用户的信息。
(4)对获取的数据构建请求参数,实现发送用户关注请求。

打开修改微博登录文件weibo_login.py,代码如下:

if __name__ == '__main__':
    #构造请求头
    headers={
        "User-Agent":"Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
    }
    # 代理IP
    proxies={}
    # 新建回话
    session=requests.session()
    # 用户账号
    user_info=login('鳄鱼君Ba','www.e1yu.com')
    # 导入微博关注模块
    from weibo_follow import follow_weibo
    # 关注用户首页链接
    follow_url='https://weibo.com/u/7129023878?refer_flag=0000015010_&from=feed&loc=nickname&is_hot=1&noscale_head=1'
    status=follow_weibo(session,follow_url)

微博点赞

这里和关注用户的实现方式大同小异,可以随便选择一个微博用户进行点赞,对网站URL请求进行抓包分析。捕捉到的URL请求如图:

Python实现微博关注用户、微博点赞和评论转发评论功能

通过对请求进行分析,请求链接的_rnd是当前时间的时间戳乘以1000再取整所得,请求参数分析如下:
(1)参数location代表被点赞的微博用户信息,数据来源可在Doc标签返回的HTML内容中找到。
(2)参数mid数据来源无法得知,点赞不同的微博,其参数值随之变化。
(3)其余参数值固定不变。

根据参数mid的变化规律得知,不同微博的数据会随之变化,那么参数mid可能用于标识微博的唯一性。为了验证猜想是否正确,我们分析浏览器所捕捉到的请求信息,最终在Doc下找到mid的参数值

在Doc标签返回的HTML内容中快速查找(Ctrl+F)参数值(4510983769100523),在HTML里的JavaScript代码中找到参数mid,而且参数mid是重复出现的,且不止一个。因此可以确定,参数mid可在网站返回的HTML中找到。综合上述分析,实现代码如下:

import re
import time
# session是临时会话对象,like_url是用户首页
def like_weibo(session,like_url):
    # 获取点赞用户的前10条微博
    res=session.get(like_url)
    loaction=res.text.split("$CONFIG['location']=")[1].split(';')[0]
    # 获取mid
    mid_list=re.findall(r'mid=(\d+)&name',res.text,re.S)
    # 构建请求头
    headers = {
        "Referer":like_url,
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
    }
    url='https://weibo.com/aj/v6/like/add?ajwvr=6&__rnd=%s'% str(int(time.time()*1000))
    # 点赞功能,默认点赞第一条
    data={
        "location":	loaction,
        "version":	"mini",
        "qid":	"heart",
        "mid":	mid_list[0],
        "loc":	"profile",
        "cuslike":	"1",
        "floating":	"0",
        "_t":	"0",
    }
    r=session.post(url,data=data,headers=headers)
    # 根据返回内容判断是否点赞成功
    if r.json()['code']=='100000':
        return '点赞成功'
    else:
        return '点赞失败'

点赞功能定义为函数like_weibo():函数参数session是会话对象;like_url是被点赞用户的首页链接。函数实现的功能如下:
(1)访问被点赞用户的首页链接,获取用户的location信息mid_list。mid_list是当前用户的前16条微博mid组成的列表。
(2)构建请求头,作为发送点赞请求的请求头。如果不加请求头,该请求就会被服务器视为非法请求,因为服务器会对请求头的Referer进行检查,这是一种反爬虫机制。
(3)发送点赞请求,将获取的location和mid_list作为请求参数,mid_list默认取第一位元素,即默认点赞第一条微博。
(4)针对请求后的响应内容判断是否点赞成功。

接着在weibo_login.py添加代码:

if __name__ == '__main__':
    #构造请求头
    headers={
        "User-Agent":"Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
    }
    # 代理IP
    proxies={}
    # 新建回话
    session=requests.session()
    # 用户账号
    user_info=login('鳄鱼君Ba','www.e1yu.com')
    # 导入微博点赞和评论模块
    from weibo_forward import like_weibo
    like_url='https://weibo.com/ZurichAirport?refer_flag=0000015010_&from=feed&loc=nickname&is_hot=1'
    like_weibo(session,like_url)

评论转发

完成微博点赞功能后,接着完成转发评论功能,该功能的实现方式和点赞功能类似。以上述微博用户首页为例,单击转发该用户的第一条微博,勾选“同时评论”选项,在开发者工具看到该请求信息:

Python实现微博关注用户、微博点赞和评论转发评论功能

从请求信息分析可得,请求链接的_rnd是当前时间的时间戳乘以1000再取整所得,domain是被转发的用户信息,请求参数分析如下:
(1)参数location和mid与点赞功能的请求参数一致。
(2)参数reason是转发内容。
(3)参数pdetail无法确定。
(4)参数pic_id其实就是图片的加密地址,和前面微博发送图片的pic_id一样。
(5)参数is_comment_base代表转发时的“同时评论”选项。
(6)其余参数值固定不变。

为了确定参数pdetail的数据来源,查找分析浏览器所捕捉到的请求信息,最后在Doc下找到该参数的数据来源,该参数代表被转发微博的用户信息。这里还是在微博用户首页的$CONFIG[‘page_id’]的参数,这里就不再放图片了,比较简单。综上分析,代码参考:

# 转发评论微博
def forward_weibo(session,forward_url,reason):
    # 获取点赞用户的前10条微博
    res=session.get(forward_url)
    # 获取location
    location=res.text.split("$CONFIG['location']")[1].split(';')[0]
    page_id=res.text.split("$CONFIG['page_id']")[1].split(';')[0]
    domain=res.text.split("$CONFIG['domain']")[1].split(';')[0]
    # 获取mid
    mid_list=re.findall(r'mid=(\d+)&name',res.text,re.S)
    # 构建请求头
    headers = {
        "Referer": forward_url,
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
    }
    # 转发评论
    url='https://weibo.com/aj/v6/mblog/forward?ajwvr=6&domain='+domain+'&__rnd=%s'%str(int(time.time()*1000))
    data={
        "pic_src": "",
        "pic_id":"" ,
        "appkey":"" ,
        "mid": mid_list[0],
        "style_type": "1",
        "mark": "999_reallog_mark_ad:999|WeiboADNatural",
        "reason":reason,
        "location":location,
        "pdetail":page_id,
        "module":"",
        "page_module_id":"",
        "refer_sort":"" ,
        "is_comment_base":"1",
        "rank":"0",
        "rankid": "",
        "isReEdit": "false",
        "_t": "0",
    }
    r=session.post(url,data=data,headers=headers)
    # 根据返回数据判断是否成功
    if r.json()['code']=='100000':
        return '转发成功'
    else:
        return '转发失败'

转发评论功能定义函数forward_weibo():函数参数session是会话对象;forward_url是被转发评论用户的首页链接;reason是转发的评论内容。函数的功能逻辑与点赞功能大致相同,此处不做详细讲解。

将上述函数like_weibo()和forward_weibo()保存在文件weibo_forward.py中,代码与20.6节的运行方式一样,打开修改微博登录文件weibo_login.py,代码如下:

   # 导入微博点赞和评论模块
    from weibo_forward import like_weibo,forward_weibo
    like_url='https://weibo.com/ZurichAirport?refer_flag=0000015010_&from=feed&loc=nickname&is_hot=1'
    like_weibo(session,like_url)
    # 评论转发微博
    reason='鳄鱼君Ba(www.e1yu.com)免费软件分享者'
    forward_weibo(session,follow_url,reason)

到这里已经实现了微博的采集、发布、用户关注、点赞和评论转发的功能,代码比较零散,需要自行整理采集发布!

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Python实现微博关注用户、微博点赞和评论转发评论功能》 发布于2020-06-12

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

1 + 1 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册