深圳设计网站的公司,wordpress优化指南,一站式做网站平台,wordpress影视站最近应朋友要求#xff0c;帮忙爬取了小红书创作平台的数据#xff0c;感觉整个过程很有意思#xff0c;因此记录一下。在这之前自己没怎么爬过需要账户登录的网站数据#xff0c;所以刚开始去看小红书的登录认证时一头雾水#xff0c;等到一步步走下来#xff0c;最终成…最近应朋友要求帮忙爬取了小红书创作平台的数据感觉整个过程很有意思因此记录一下。在这之前自己没怎么爬过需要账户登录的网站数据所以刚开始去看小红书的登录认证时一头雾水等到一步步走下来最终成功思路通了感觉其实还是很简单。解决思路一开始我就只有这么一个网址小红书创作平台和登录账号、密码然后经过数次试错分析最终拿出了解决方案。要爬取这个平台的数据最核心的就是使用python模拟浏览器登录进去。探索过程1、在登陆界面点击用密码登录输入账号密码验证码通过chrome调试工具查看请求的header会发现登录时是通过POST方式请求的实际地址是http://post.xiaohongshu.com/web_api/sns/v1/homerus/user/login_with_passwd登录需要的参数有五个分别是账号、密码、token、captcha(图片验证码)、zone值其中zone是指你所在的国家的区号例如中国为86因此值为86。那么这里处理比较困难的就是token和captcha。2、token哪里来的是什么值captcha是图片验证码怎么处理我发现进行在登陆界面点击用密码登录这个操作时实际进行了一次GET请求请求的地址http://post.xiaohongshu.com/api/homerus/login/captcha并且返回了两个数据一个是token还有一个是验证码图片链接。怎么样有没有很开心需要什么就来什么。3、因为每次登录token和captcha都会刷新因此代码里面不能写死。那么对于captcha我的处理方式就是把图片下载下来手动在程序中输入验证码作为参数那token呢token我已经获取了啊直接作为参数即可因此解决该模拟登录过程一共三步一、通过get请求登陆界面获取token和图片验证码二、token直接作为参数验证码手动输入加上账号、密码、区号作为post请求登录的参数三、登陆成功后的response header里有我们需要的cookie将其取出拼到新的request header里请求要爬取数据的页面成功获取数据实现过程具体代码实现就是按照上述思路的我进行了注释不再多做说明。 第一步 cookie cookielib.CookieJar()handler urllib2.HTTPCookieProcessor(cookie)opener urllib2.build_opener(handler)rrequests.get(http://post.xiaohongshu.com/api/homerus/login/captcha)token json.loads(r.text)[data][token]# get请求到的token#print tokenimg_urljson.loads(r.text)[data][url]picture opener.open(img_url).read()local open(F:/code.jpg, wb)# 保存验证码到本地local.write(picture)local.close() 第二步 secret_code raw_input(输入验证码 )login_data {phone: 136****0000,passwd: XXXXXXXXXXXX,token: token,# 获取的tokencaptcha: secret_code,# 手动输入的验证码zone: 86}headers {content-type: application/json}# payload请求方式res requests.post(http://post.xiaohongshu.com/web_api/sns/v1/homerus/user/login_with_passwd,datajson.dumps(login_data),headersheaders)# 模拟登录header{ 第三步 Accept: application / json, text / plain,Connection: keep - alive,Cookie: res.headers[Set-Cookie].replace( Path/,)xhs_spid.6d2921fa0111a09b6c3c1516671392.1.15166716811516671392.6d3c3921-2e47-4cbe-b695-698499ac4636; xhs_spses.6d29*,# 登录成功的cookie拼装在headerReferer: http: // post.xiaohongshu.com /,User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36}resp requests.get(http://post.xiaohongshu.com/web_api/sns/v1/homerus/note/list?page1page_size200,headersheader)data json.loads(resp.text) # 成功获取数据最终我成功获取到如下所示的数据集。网上有很多模拟登录微博豆瓣等网站的教程和代码但小红书这个平台貌似不太受用这个思路对于很多需要登陆才能查看数据的网站都应该有帮助因此分享在这里供参考。