在掘金教你如何用nodejs爬掘金

前言,此文章仅作教学用途,如果有人拿去干别的事情,我概不负责,如果该文章侵害到了掘金社区的利益,请小编立刻联系我删除.

最近闲来无聊,逛了好几天掘金,想想自己假如掘金这么久了,一篇文章都没发过,遂想写个爬虫教程吧,目标就是掘金,嘿嘿

本文用到的三个工具为

  • cheerio:jQuery语法,帮助你在非浏览器环境下解析网页用的
  • qs 序列化成url的查询字符串,(不知道说没说对...)例:{a:1,b2} => a=1&b=2
  • request 一个封装好的好用的请求库

开始我是尝试直接请求掘金首页,然后用cheerio解析,然后拿到网页继续干活的。。可是事情并没有这么简单,通过这个方法爬取的网页跟我们正常浏览的首页不一样(有可能是我哪姿势不对)
没办法,只能从接口出发了

首先打开网页版掘金, 然后打开chrome的network,查看相关请求

image

咦!recommend?推荐?好了,进去一看,果然是首页热门文章,但是。。。


image

请求参数suid是什么?查看请求调用堆栈,,再看源码,emmmm 源码已经被混淆压缩了


image

这可怎么办?我没有登陆
查看完所有请求响应都没看到跟suid有关的,这可咋整?

直接进入请求网址,再更改suid,发现随便更改都可以得到相应
但是。。。这并没有什么用啊!就10条信息我爬你个小杰瑞啊?

没办法了,只能老套路了。先登陆再说

为了防止页面跳转后登陆请求消失,需要先勾选Preserve log,使页面跳转后前面的请求不会消失

差点忘打码了,qwq


image

我是使用邮箱注册的,可能使用其它账号注册的接口会不一样

  let data = await request.create({
    url: 'https://juejin.im/auth/type/email',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({email: '155com', password: 'cfdsd.'}) //账号密码
  });

直接一个请求搞定,得到如下相应,问题的关键就在于cookie


image

好了,接下来该找接口了,点击最新,发现network多了下面这个请求,其响应数据就是最新板块的文章

image

相关参数有来源,设备id,用户id,token等,其中最重要的就是token,id什么的随便改两个字符好像也没问题,但是token错了它会报illegal token,请求方法错了,就算参数对了也会报missing src。

当你看到token的时候,你会发现,哪都找不到这个数据,就算是登陆响应里面也没有。当然刚开始好像是有,我也忘了我当时token是复制网页的还是直接用的请求响应cookie里面的了

反正最后你是直接找不到它了

当你仔细看第5张图的时候,你会发现这auth后面这串字符是多么的熟悉,没错,它就是你们常用的base64编码

打开相关网站,解码

image

答案呼之欲出啊,最重要的三个参数全在这了,那么问题来了,node如何解析base64编码呢?

一行代码解决,buffer对象本身提供了base64的解码功能,最后调用toString方法,转成字符串,最后parse得到对象

  const cookie = data.headers['set-cookie'];
  const encodeToken = cookie[0]
    .split(';')[0]
    .split('=')[1];
  const decodeToken = JSON.parse(new Buffer(encodeToken, 'base64').toString())

有了token,你就可以随心所欲的爬了,爬图片?主题?标题?文章内容?都欧克

const {token, clientId, userId} = require('./user.json');  //这里我将相关数据写入了json文件中
const querystring = qs.stringify({
  src: 'web',
  uid: userId,
  device_id: clientId,
  token: token,
  limit: 20,
  category: 'all',
  recomment: 1
});
const data = await request.get({
  url: `https://timeline-merger-ms.juejin.im/v1/get_entry_by_timeline?${querystring}`,
  headers: {
    host: 'timeline-merger-ms.juejin.im',
    referer: 'https://juejin.im/timeline?sort=comment'
  }
});

当然,我没有使用数据库来保存数据,这只是教大家爬取原理,到这里,一个超级简单的爬虫就完成了

emmm 到最后好像也没用到cheerio了 ◔ ‸◔?

以上代码或言论如有错误,还望大家指出

全部代码见https://github.com/danmin25/Junjin-scrapy

最后,爬虫需节制,小心被封哦,还有,我要吐槽一句编辑器,居然不支持粘贴图片???

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,499评论 25 707
  • 陈好你好阅读 154评论 0 0
  • 首先声明下我不是什么专业人士(虽然专业是医学检验),也不是资深辣妈(虽然还勉强称得上人长得还凑合,捂脸羞羞)哈哈哈...
    lucky珮阅读 361评论 1 0
  • ——读《人间草木,洗尽铅华》有感 在这篇文章里,住着喜欢读汪先生的书,因为他喜欢汪先生的写作风格,我...
    97e75edc786b阅读 339评论 0 0
  • 以前我很喜欢删东西(虽然现在也很喜欢。。。)我每天都致力于让我的生活能够简化简化再简化,但却忽略了生活本来就是复杂...
    0639ba56d9fa阅读 136评论 0 0