1.前序
前两篇主要介绍了微博热搜和大v的推文发布,今天和大家分享一下怎么样才能抓取到微博大V的粉丝数量
2.数据采集
同理,我们要获取微博用户的粉丝数量,首先我们需要知道访问的接口。只要知道访问的接口,后面就简单了,只需要对采集到的数据,按需做一下数据分析即可。
def get_html_data(self, user_id):
# 实际请求Url
actual_url = "https://m.weibo.cn/api/container/getIndex?type=uid&value="+str(user_id)
# 随机获取headers
res = requests.get(actual_url, headers={'User-Agent': UA[random.randint(0, len(UA) - 1)]}).text
print("抓取开始,实际请求Url:" + actual_url)
return res
3.数据分析
当我们拿到数据后,我们需要找到我们想要知道的数据在哪里,如果是html就是要知道在哪标签里,json就是知道在哪个键值key中。
def run(self, *args):
item = dict()
res = self.get_html_data(args[0])
if not res:
print("抓取完成...")
return self.post_list
try:
res_json = json.loads(res)
# print(res_json)
# 读取微博账号的粉丝数
item["followers"] = res_json["data"]["userInfo"]["followers_count"]
# 微博用户名
item["screen_name"] = res_json["data"]["userInfo"]["screen_name"]
# 读取微博账号微博的Domain值
for tab in res_json["data"]["tabsInfo"]["tabs"]:
if tab["id"] == 2:
item["domain"] = tab["containerid"][:6]
break
print(item)
except Exception:
print("抓取数据格式异常!!!")
return self.post_list
4.最后
准备工作完成后,接下来就是验证。
image.png
胡歌,粉丝数量 71880957
image.png
王思聪,粉丝数量 41576828
weibo = Weibo()
# 早报网,新浪新闻,胡歌,王思聪
userid_list = [1654134123, 2028810631, 1223178222, 1826792401]
for user_id in userid_list:
weibo.run(user_id)
image.png
很明显,代码执行的结果与实际数量是相符的。说明我们的解析的字段,我们的方法没错。
更多源码信息,请参考原文