据说想了解一我的要从爬取她(他)的全部微博开始呢~mp.weixin.qq.compython
既然你已经点进来了,那我就直说吧,标题实际上是我瞎编的,但套路你点进来学习的我是真心的。git
前两天发了篇文章:github
从阅读量能够看出来了,不少小伙伴对这玩意并不感兴趣。看来仍是得多回归回归老本行,写点有趣的脚本,才能套路各位过来学习呀。今天的小目标是写个小爬虫,爬取目标用户发的全部微博数据。废话很少说,让咱们愉快地开始吧~session
这里简单讲讲整个爬取的流程吧。首先,固然是模拟登陆新浪微博啦,这里仍是借助咱们以前开源的模拟登陆包来实现微博的模拟登陆。具体而言,代码实现以下:ide
'''利用DecryptLogin模拟登陆''' @staticmethod def login(username, password): lg = login.Login() _, session = lg.weibo(username, password, 'mobile') return session
而后,让程序使用者输入想要爬取的目标用户id。那么如何获取这个微博用户id呢?以刘亦菲的微博为例,首先,进入她的主页,而后能够看到连接里有:工具
因此刘亦菲的微博用户id为3261134763。学习
根据使用者输入的微博用户id,咱们用已经实现模拟登陆的会话来访问如下连接:url
# 连接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)
这个连接在浏览器里显示大概是这样的:spa
显然,在这,咱们能够利用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页微博
没啥特别的技巧,值得一提的处理只有两点:
思路就是这么个思路,一些细节的处理就本身看源代码吧,代码运行的效果见:
https://zhuanlan.zhihu.com/p/...
代码运行的命令格式为:
python weiboSpider.py --username 用户名 --password 密码
大功告成啦,完整源代码详见相关文件。
老规矩,把爬到的数据拿来可视化一波呗,方便起见,就看看刘亦菲的微博数据可视化效果吧。
先来看看用她发的全部微博作的词云吧(仅原创微博):
而后看看她原创和转发的微博数量?
以及每一年发的微博数量?
果真如今发的微博数量变少了不少。看看她发的第一条微博呗,微博id是zoaIU7o2d,😀:
“你们好,我是刘亦菲”
统计一下她每一年发的原创微博都拿到了多少赞?
多少转发量?
以及多少评论?
爬的数据很少,就先这样呗,完整源代码和数据详见相关文件~