爬一个人的所有微博 python_听说想了解一个人要从爬取她(他)的所有微博开始呢~...

原文链接听说想了解一个人要从爬取她(他)的所有微博开始呢~​mp.weixin.qq.comv2-5df64350e694f38137a00ff96f150cb3_ipico.jpg

导语

既然你已经点进来了,那我就直说吧,标题其实是我瞎编的,但套路你点进来学习的我是真心的。

前两天发了篇文章:

从阅读量可以看出来了,很多小伙伴对这玩意并不感兴趣。看来还是得多回归回归老本行,写点有趣的脚本,才能套路各位过来学习呀。今天的小目标是写个小爬虫,爬取目标用户发的所有微博数据。废话不多说,让我们愉快地开始吧~

原理简介

这里简单讲讲整个爬取的流程吧。首先,当然是模拟登录新浪微博啦,这里还是借助我们之前开源的模拟登录包来实现微博的模拟登录。具体而言,代码实现如下:

'''利用DecryptLogin模拟登录'''

@staticmethod

def login(username, password):

lg = login.Login()

_, session = lg.weibo(username, password, 'mobile')

return session

然后,让程序使用者输入想要爬取的目标用户id。那么如何获取这个微博用户id呢?以刘亦菲的微博为例,首先,进入她的主页,然后可以看到链接里有:

所以刘亦菲的微博用户id为3261134763。

根据使用者输入的微博用户id,我们用已经实现模拟登录的会话来访问以下链接:

# 链接1

url = f'https://weibo.cn/{user_id}'

res = self.session.get(url, headers=self.headers)

# 链接2

url = f'https://weibo.cn/{user_id}/info'

res = self.session.get(url, headers=self.headers)

这个链接在浏览器里显示大概是这样的:

显然,在这,我们可以利用xpath提取到目标用户的一些基本信息:

# 链接1

selector = etree.HTML(res.content)

base_infos = selector.xpath("//div[@class='tip2']/*/text()")

num_wbs, num_followings, num_followers = int(base_infos[0][3: -1]), int(base_infos[1][3: -1]), int(base_infos[2][3: -1])

num_wb_pages = selector.xpath("//input[@name='mp']")

num_wb_pages = int(num_wb_pages[0].attrib['value']) if len(num_wb_pages) > 0 else 1

# 链接2

selector = etree.HTML(res.content)

nickname = selector.xpath('//title/text()')[0][:-3]

xpath是啥我就不多废话了,看下网页源码,很容易就可以写出来:

提取完之后打印出来让程序使用者确认一下用自己输入的用户id获得的用户信息是不是和自己想要爬取的用户信息一样,等使用者确认信息无误再开始爬该用户的微博数据:

# 使用者确认是否要下载该用户的所有微博

tb = prettytable.PrettyTable()

tb.field_names = ['用户名', '关注数量', '被关注数量', '微博数量', '微博页数']

tb.add_row([nickname, num_followings, num_followers, num_wbs, num_wb_pages])

print('获取的用户信息如下:')

print(tb)

is_download = input('是否爬取该用户的所有微博?(y/n, 默认: y) ——> ')

if is_download == 'y' or is_download == 'yes' or not is_download:

userinfos = {'user_id': user_id, 'num_wbs': num_wbs, 'num_wb_pages': num_wb_pages}

self.__downloadWeibos(userinfos)

爬用户微博数据也基本用的xpath来提取数据,而查看用户的微博只需要访问以下这个链接就可以了:

url = f'https://weibo.cn/{user_id}?page={page}'

page代表访问用户的第page页微博

没啥特别的技巧,值得一提的处理只有两点:每爬20页微博数据,就保存一次数据,以避免爬虫意外中断,导致之前已经爬到的数据“人去楼空”;

每爬n页数据就暂停x秒,其中n是随机生成的,且n一直在变化,x也是随机生成的,且x也一直在变化。

思路就是这么个思路,一些细节的处理就自己看源代码吧,代码运行的效果如下(设置的延时比较长,所以数据爬取速度很慢,毕竟只是为了学习的话,没必要搞那么快,都不容易):v2-2fbcab69b674771936d3231bb92f7dea.jpghttps://www.zhihu.com/video/1218225967082405888

代码运行的命令格式为:

python weiboSpider.py --username 用户名 --password 密码

大功告成啦,完整源代码详见相关文件。

数据可视化

老规矩,把爬到的数据拿来可视化一波呗,方便起见,就看看刘亦菲的微博数据可视化效果吧。

先来看看用她发的所有微博做的词云吧(仅原创微博):

然后看看她原创和转发的微博数量?

以及每年发的微博数量?

果然现在发的微博数量变少了很多。看看她发的第一条微博呗,微博id是zoaIU7o2d, :

“大家好,我是刘亦菲”

统计一下她每年发的原创微博都拿到了多少赞?

多少转发量?

以及多少评论?

爬的数据不多,就先这样呗,完整源代码和数据详见相关文件~

相关文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值