python爬取知乎用户信息_python爬取知乎用户总结

看了崔老师的微课录播 | 03月17日 爬取知乎所有用户详细信息视频,跟着学习顺便复习使用Scrapy练习,然后写个小总结,当然这里不会详细介绍每一步操作,还是跟着视频学吧。

本人电脑64位win7 python2.7。

要在知乎爬取所有用户详细信息,一开始要先找个大V,因为关注大V的人比较多,而且大V自己关注别人也基本是大V,这样下去几轮一个庞大的数据网就出来了,我就继续按照视频中选择start_user = 'tianshansoft'这个大V开始深挖。然后把每个人的数据信息保存到Mongodb中。

一开始先在cmd里创建个scrapy startproject zhihuuser,用pycharm打开这个项目

用了scrapy比较方便,如果一些网站反爬虫没什么要求,基本可以输入网址就可以爬取了。先爬取http://www.zhihu.com/首页看看行不行,把name改成zhihu,在pycharm下Terminal输入scrapy crawl zhihu启动。会发现报500错,需要加个user-agent头让知乎知道你是浏览器访问,这里不能在setting.py里像视频里直接在DEFAULT_REQUEST_HEADERS添加,可能我版本都是2.7的,要在上面一点点地方USER_AGENT添加user-agent才可以。一开始我跟着老师做怎样都是500,我解决方法就是不要scrapy写一个能不能爬出http://www.zhihu.com/登陆页面出来。发现就用request加user-agent就可以了,所以就再看看scrapy文档解决了。

要从tianshansoft大V开始就是要先去到他个人主页,然后分别获取到他的关注用户和关注他的用户,再获取用户们的个人主页,递归循环下去........就是需要3个函数,函数1个人主页里有函数2他关注的人和函数3他的粉丝,函数23又回到对应的函数1个人主页。

开始分析网页用火狐浏览器去到https://www.zhihu.com/people/tianshansoft/following个人主页,这里following是他关注人列表。用firebug再刷新一下网页,出现一个这样的东西,data为空。

再按下一页,这时候有data出来了,里面就是20个用户的信息

这里有个关键,请求头要带有'Authorization':'oauth c3cef7c66a1843f8b3a9e6a1e3160e20',否则抓取不到任何信息,最保险的方法就是整个header都复制进去,真正模拟浏览器访问

好了有了这些参数可以构造url,虽然问题还是没有解决掉,但是貌似更改limit跟offset参数就可以了,虽然data里有20个用户数据,但是页面只会显示真实用户,有些用户名字叫知乎用户这个人就不显示,其url_token为None,所以有时候数数是不够20人的。主要目的是获取用户的url_token回到函数1构造个人主页url。响应里还有paging里面信息就是一些是否首页是否最后一页,可以用这个参数去判断。对于太复杂json,我还是喜欢用笨方法再写一个脚本一步步去分析。

import requests

import json

url = 'https://www.zhihu.com/api/v4/members/tianshansoft/followers?include=data%5B*%5D.answer_count%' \

'2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%' \

'5D.topics&offset=20&limit=20'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0',

'Authorization':'oauth c3cef7c66a1843f8b3a9e6a1e3160e20',

}

wb_data = requests.get(url, headers=headers)

results = json.loads(wb_data.text)

for result in results['data']:

print result['url_token']

if 'paging' in results.keys() and results.get('paging').get('is_end') == False:

next_page = results.get('paging').get('next')

print next_page

这样就成功获取大V关注的人的用户信息,同样道理关注大V的粉丝也跟上面方法差不多,只是url里followers换成followees,就不重复了,函数2,3完成!

获取到用户的url_token后就是要构造函数1的url,当把鼠标移到用户名字上面时,firebug出现

响应那边就出现一大堆这个用户各种可见数据啦

然后就是已字典或者json格式一条条保存到mongodb中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值