栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

新浪微博评论及用户信息爬取

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

新浪微博评论及用户信息爬取

前言

        在我们平时研究中,很多都会用到微博数据,包括微博正文、评论,以及评论用户的个人信息,本章就详细介绍一下,如何利用爬虫工具(爬山虎)爬取一条微博及其下评论信息。

1、微博正文

        我们以这篇微博为例,将链接复制到任务中,执行下一步,添加字段,选择页面需要爬取的信息,这样就可以爬下来微博的媒体名称、正文、时间、点赞数等。 

          

 2、评论

        微博评论分为三个版本:weibo.com(pc端)、weibo.cn(移动端)、m.weibo.cn(手机端),而m.weibo.cn用爬山虎以瀑布流的方式爬取是最简单的,但是这样无法爬取评论用户个人资料的链接。因此,我们还是用weibo.cn更方便。

         还是以上一个微博为例,在网址处将weibo.com改为weibo.cn,回车,点击“查看更多热门”就可以看到我们需要爬取的评论了:

                

            在这种方式下,就可以选择对应的字段爬取相关评论信息,这里注意,点击用户名称后,同时将其url作为一个字段爬取下来,下一步爬取用户信息需要使用。(如果直接在url深入此链接,会直接跳转到https://m.weibo.cn/这个网址,而不是对应用户信息界面)

        我们爬取下来的用户信息链接格式为https://m.weibo.cn/user_id,这里的user_id可以为/u/编号的格式,也可以直接为自命名id的格式,这都可以链接到对应用户界面。

3、评论用户信息

        我们在上一步得到链接组后,有时候会发现一个用户可能评论了多次,这时候用户链接相同会被爬虫工具默认过滤掉,如何防止相同信息被过滤参考这篇文章。 

        将其复制到爬虫工具下,可以看到相关用户的简介,但是只有性别和地域显然信息量是很少的:

                                  

         这时候点击“资料”,获取url,选择“深入此链接”,这时候就可以看到这个用户的完整信息了:

                                         

         将基本信息作为一个字段爬取下来,完整的还包括教育信息,也都可以爬下来,导出到excel里,示例如下:

                

         然后可以通过程序自动提取其中的重要信息,这里笔者提供一个简单的提取程序作为参考。

''' 提取用户基本信息:性别、地区、生日'''
def get_native_infor(c):  #c代表用户的一个基本信息
    result = ['', '', '']
    s1 = re.split('[::]',c)
    for k in range(len(s1)-1):  # 重新拼接
        if k+1 != len(s1)-1:
            s1[k] = s1[k][-2:]+s1[k+1][:-2]
        else:
            s1[k] = s1[k][-2:] + s1[k + 1]

    for s in s1:
        if s.find('性别') >= 0:
            result[0] =  s.strip('性别')
        if s.find('地区') >= 0:
            result[1] =  s.strip('地区').strip('认证').strip('性')
        if s.find('生日') >= 0:
            tmp = re.search(r"(d{4}-d{1,2}-d{1,2})", s)
            if tmp is not None:
                result[2] = tmp.group(0)
            else:
                result[2] = ''

    return result

'''获取教育信息'''
def get_eucation(e):
   if e.find('学院')>=0 or e.find('大学')>=0 or e.find('中学')>=0 or e.find('小学')>=0 or e.find('学校')>=0:
        return e.split(' ')[0].strip('·')

        程序提取效果还可以:

        

如有问题或者更好的方法,感谢留言指正~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/355192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号