美文网首页我的Python自学之路爬虫爬虫
抓取单博主的所有微博及其评论

抓取单博主的所有微博及其评论

作者: 大邓和他的python | 来源:发表于2017-05-09 10:51 被阅读644次

这是个简单又复杂的爬虫。抓取逻辑很简单,但任务实现会略微繁琐。但只要思路清楚,还是很简单的。
对象-路易威登微博
网址:http://m.weibo.cn/u/1836003984红色部分是微博账号的id

01-路易威登.png

爬取思路
1、我们先写一个微博的所有评论,看网址规律是什么样子,有没有一些奇怪的参数,这些参数要到哪里获取?
2、依次类推,发现爬所有微博评论的微博评论的规律,看看有没有奇怪的参数,这些参数要到哪里才能获取?
说的优点云里雾里的,这里附上三个url模板。

https://m.weibo.cn/api/comments/show?id={id}&page={page}
https://m.weibo.cn/api/container/getIndex?containerid={oid}&type=uid&value={uid}&page={page}
https://m.weibo.cn/api/container/getIndex?type=uid&value={usr_id}

第一个url模板代表的是某条微博的id,打开这个url会返回该微博某页的评论。
第二个url模板代表的是微博用户所发微博的列表,打开该url,返回的是某页的微博列表。
第三个url模板代表的其实是微博用户主页。
访问第一个url需要id,但要访问了第二个url才能获得id
访问第二个url需要oid、uid,但是oid、uid需要访问了第三个url才能获得。
思路很简单,那我们就此展开。

一、微博评论

抓包是一种美德,翻看路易威登一个微博评论,打开开发者工具,进行抓包准备。

03-微博评论的网址规律.jpg 03-网址.jpg

好了,抓包分析,找到我们屏幕中看到的数据了。那么方框中圈中的网址就是评论数据对应的网址。

http://m.weibo.cn/api/comments/show?id=4103033291539613&page=4

网址关键参数,微博id和页码

03-要爬取的数据.jpg

上面红框中圈中的是第四页评论的数据。
data:第四页的数据
最大的方框,是微博中某条评论的相关数据,如创建时间,评论的id,喜欢数(点赞数)、发布微博的网站(是手机端还是网页端)、评论文本、发评论的用户相关信息(用户id、昵称等)
max:最大页数
total_num:微博评论数
好了,直接附上爬取某微博评论这部分的爬虫脚本截图

03-代码.png
def get_comments(wb_id): 
    Data = [] url = 'https://m.weibo.cn/api/comments/show?id={id}'.format(id=wb_id) 
    page_url = 'https://m.weibo.cn/api/comments/show?id={id}&page={page}' 
    Resp = requests.get(url, headers=headers, cookies=Cookies) 
    page_max_num = Resp.json()['max'] 
    for i in range(1, page_max_num, 1): 
        p_url = page_url.format(id=wb_id, page=i) 
        resp = requests.get(p_url, cookies=Cookies, headers=headers) 
        resp_data = resp.json()
        data = resp_data.get('data') 
        for d in data: 
            review_id = d['id'] 
            like_counts = d['like_counts'] 
            source = d['source'] 
            username = d['user']['screen_name'] 
            image = d['user']['profile_image_url'] 
            verified = d['user']['verified'] 
            verified_type = d['user']['verified_type']     
            profile_url = d['user']['profile_url'] 
            comment = d['text'] time.sleep(1)

我们想自动爬取路易威登发布的所有微博,必须批量获取微博id,才能高效爬取路易威登所有数据。
所以现在,问题来了,怎么批量获得微博id??

二、批量获取微博id

回到主页

04-主页.jpg

按F12,准备抓包,点击最下方的“查看他的全部微博”。我们不停的向下方滚动,相当于向网站请求了六次,抓包如图。这是我打开的第四页的所有微博对应的网址。

05-网址.jpg

打开第四页的网址对应的数据

05-展开的数据.jpg

我们得到了上图,这都是我们想要的数据。
page:当前页码
total:微博列表的页面数
cards:当前微博列表对应的数据(含有多个微博数据)
红色方框中的蓝色方框:众多微博id的一个。
现在我们可以写一个关于获取微博id的爬虫,直接附上代码

05批量爬微博id.png
def mblog_list(uid, oid): 
    Mblog_list = [] 
    base_url = 'https://m.weibo.cn/api/container/getIndex?containerid={oid}&type=uid&value={uid}' 
    page_url = 'https://m.weibo.cn/api/container/getIndex?containerid={oid}&type=uid&value={uid}&page={page}' 
    url = base_url.format(oid=oid, uid=uid) 
    resp = requests.get(url, headers=headers, cookies=Cookies) 
    resp.encoding = 'gbk' 
    response = resp.json() 
    total = response['cardlistInfo']['total'] 
    page_num = int(int(total) / 10) + 1 
    for i in range(1, page_num + 1, 1): 
        p_url = page_url.format(oid=oid, uid=uid, page=i) 
        page_resp = requests.get(p_url, headers=headers, cookies=Cookies) 
        page_data = page_resp.json() 
        cards = page_data['cards'] 
        for card in cards: 
            mblog = card['mblog'] 
            created_at = mblog['created_at'] 
            id = mblog['id'] text = mblog['text']   
            reposts_count = mblog['reposts_count']     
            comments_count = mblog['comments_count'] 
            attitudes_count = mblog['attitudes_count'] 
            mblog_data = {'created_at': created_at, 'id': id,
           'text': text, 'reposts_count': reposts_count, 
           'comments_count': comments_count, 
           'attitudes_count': attitudes_count} 
           Mblog_list.append(mblog_data) 
           print(' ' * 10, mblog_data) 
        time.sleep(1) 
    return Mblog_list

现在问题来了,uid,oid怎么获取呢?

三、获取uid、oid

重新回到主页

06-uid、oid查找.jpg

刷新,出现这个网址

http://m.weibo.cn/api/container/getIndex?type=uid&value=1836003984&containerid=1005051836003984
06-uid、oid网址.jpg

点击Preview,展开每个项目,查找uid、fid、oid

06-uid出现.jpg 06-fid 出现.jpg

好了,现在uid、oid有了,我们专门写获取这两个参数的小脚本,代码直接上

06-代码.png
def usr_info(usr_id): 
    url = 'https://m.weibo.cn/api/container/getIndex?type=uid&value={usr_id}'.format(usr_id=usr_id) 
    resp = requests.get(url, headers=headers, cookies=Cookies)
    jsondata = resp.json() 
    uid = jsondata.get('userInfo').get('toolbar_menus')[0].get('params').get('uid') 
    fid = jsondata.get('userInfo').get('toolbar_menus')[1].get('actionlog').get('fid') 
    oid = jsondata.get('userInfo').get('toolbar_menus')[2].get('params').get('menu_list')[0].get('actionlog').get('oid') 
    cardid = jsondata.get('userInfo').get('toolbar_menus')[1].get('actionlog').get('cardid') 
    containerid = jsondata.get('tabsInfo').get('tabs')[0].get('containerid') 
    Info = {'uid': uid, 'fid': fid, 'cardid': cardid, 'containerid': containerid, 'oid': oid} 
    print(Info) 
    return Info

获取完整代码,请关注

公众号:大邓带你玩Python

更多内容

文本分析
python居然有情感??真的吗??
文本分析之网络关系
中文分词-jieba库知识大全
自然语言处理库之snowNLP
用gensim库做文本相似性分析
基于共现发现人物关系的python实现
用python计算两文档相似度
数据分析
酷炫的matplotlib
文本分析之网络关系
pandas库读取csv文件
用词云图解读“于欢案”
神奇的python
初识Python的GUI编程
Python实现文字转语音功能
怜香惜玉,我用python帮助办公室文秘
逆天的量化交易分析库-tushare
开扒皮自己微信的秘密
8行代码实现微信聊天机器人
使用Python登录QQ邮箱发送QQ邮件
爬虫
爬虫实战视频专辑
【视频】手把手教你抓美女~
当爬虫遭遇验证码,怎么办
【视频】于欢案之网民的意见(1)?
【视频】有了selenium,小白也可以自豪的说:“去TMD的抓包、cookie”
【视频】快来get新技能--抓包+cookie,爬微博不再是梦
【视频教程】用python批量抓取简书用户信息
爬豆瓣电影名的小案例(附视频操作)
爬豆瓣电影名的小案例2(附视频操作)
用Python抓取百度地图里的店名,地址和联系方式

相关文章

  • 抓取单博主的所有微博及其评论

    这是个简单又复杂的爬虫。抓取逻辑很简单,但任务实现会略微繁琐。但只要思路清楚,还是很简单的。对象-路易威登微博网址...

  • 学术讨论不应该有舞台

    微名--匿名进行讨论,淡薄所有名气,你所获得的只是纯粹的知识。 最近在微博评论过某博主的微博,大意是这个博主用了微...

  • python爬虫抓取新浪微博数据

    需求分析 抓取 琢磨先生的新浪微博 抓取的内容包括:微博发布的时间,正文(仅提取文字),转发数,评论数,点赞数 数...

  • 【爬虫】微博评论数据抓取

    1、数据来源网站(手机端微博)https://m.weibo.cn/[https://m.weibo.cn/]im...

  • Python 学习记录3

    获取微博关注者的信息并抓取微博里的发布的照片原图 微博里发布的是单张图片 微博里发布的是多张图片 获取所有微博的总...

  • 某程序员开发“原谅宝”, 微博评论被大量女用户疯狂“输出”

    微博博主“将记忆深埋”发布了一条微博,这看似是一件正常的事情,为何评论会掀起轩然大波?原来,博主在其文中写道,自己...

  • 曾经我也想过一了百了

    今天刷微博刷到一条关于抑郁症的微博,很多人博主的微博下评论说要她坚强,好好的生活。其中有一条评论说她原来也有抑郁,...

  • pyhton爬取爱豆(李易峰)微博评论

    今日目标:微博,以李易峰的微博为例: 然后进入评论页面,进入XHR查找真是地址: 很明显,是动态的,抓取也是按我以...

  • 微博评论

    [cp]@Mr_FAN先生: 二十岁的时候,千万不要花精力和时间去犹豫和纠结什么选择是最好的,因为没有人知道,有想...

  • 微博评论

    母校是一个自己可以一天骂上千遍但是不许别人骂一句的地方,不知道这句话是从哪儿传出来的,非常讨厌这句话+++为什么别...

网友评论

    本文标题:抓取单博主的所有微博及其评论

    本文链接:https://www.haomeiwen.com/subject/fosbtxtx.html