在我们平时研究中,很多都会用到微博数据,包括微博正文、评论,以及评论用户的个人信息,本章就详细介绍一下,如何利用爬虫工具(爬山虎)爬取一条微博及其下评论信息。
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('·')
程序提取效果还可以:
如有问题或者更好的方法,感谢留言指正~



