Hello,大家好,我是wangzirui32,今天我们来学习如何爬取并下载你所有粉丝的头像图片。
1. 分析粉丝列表
1.2 数据接口
经过我的分析,发现粉丝列表是通过js脚本加载生成的,那它必然会访问一个数据接口,这个接口经过查找,为:
https://blog.csdn.net//phoenix/web/v1/fans/list?blogUsername=你的用户名
访问这个接口就可以获取某个用户所有的粉丝数据。
1.3 分析数据接口
这里我直接放图片,不懂的可以在评论区讨论:
2. 编写代码
首先,你需要在程序文件的目录下创建picture文件夹,然后根据上面的分析,写出代码:(不懂的看注释)
from requests import get
from json import loads
from urllib.request import urlopen
# 伪造请求头
headers = {
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36",
"Host": "blog.csdn.net"
}
# 参数定义 可以把blogUsername改为你的用户名(Tips:是用户名不是昵称!)
params = {
"blogUsername": "wangzirui32"}
# 请求数据
url = "https://blog.csdn.net//phoenix/web/v1/fans/list"
r = get(url, params=params, headers=headers)
# 使用loads加载数据
fans_data = loads(r.text)['data']['list']
# 用来统计成功下载的粉丝头像的数量
save_fans_num = 0
# 遍历所有粉丝数据
for i in fans_data:
# 文件名为:当前粉丝的昵称.png
with open("picture/" + i['nickname'] + ".png", "wb") as f:
# 防止发生错误
try:
f.write(urlopen(i["userAvatar"]).read())
except Exception:
# 如果错误,就提示下载失败
print(i['nickname'] + "的头像下载失败!")
else:
# 如果没有报错,则提示下载完成,并将save_fans_num+1
print(i['nickname'] + "的头像已经下载完毕!")
save_fans_num += 1
print("头像下载完毕!")
print("一共下载了" + str(save_fans_num) + "个粉丝头像")
3. 展示结果
目前我一个有15个粉丝,所以在没有出错的情况下应该下载了15张照片,运行代码,结果也真如此:
快看看有没有你吧!
写在最后
有些博主的粉丝很多,有的甚至上千,上万个,程序需要运行很久才能爬取完成,这里我建议使用多进程爬虫或多协程爬虫来解决时间长的问题。
好了,今天的课程就到这儿了,感兴趣的可以点赞收藏,拜拜!