最近学习node爬虫,想练习下需要登录的数据爬虫,于是就拿segmentfault来练练手,已经成功解决了每一次登录请求的随机query和cookie同步的问题,然后直接用superagent请求这个接口:https://segmentfault.com/api/...,也已经成功返回状态码200,但是想要继续爬取数据,会发现登录成功后每次请求的request header的cookie都有一个fs_remember,值貌似是自动生成一串随机字符串,简单分析可知这个cookie应该是登录是否成功的标志,但是这个参数的来源我查看了它源代码也没有找到,导致之后的爬虫无法进行下去,请问有大神遇到过同样的情况么,先谢谢了!
相关代码如下:
const superagent = require('superagent')
const async = require('async')
const getRandom = require('./getRandom')
let random = ''
let cookie = ''
async.series([
(cb) => {
superagent
.get('https://segmentfault.com')
.end((err, res) => {
if (err) console.log(err)
cookie = res.headers['set-cookie'].join(',').match(/(PHPSESSID=.+?);/)[1]
// console.log(cookie)
random = getRandom.getToken(res.text)
// console.log(res)
cb(null)
})
},
(cb) => {
const username = process.argv[2]
const password = process.argv[3]
console.log(cookie)
console.log(random)
let header = {
'accept': '*/*',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9',
'content-length': '47',
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'cookie': `PHPSESSID=${cookie};`,
'origin': 'https://segmentfault.com',
'referer': 'https://segmentfault.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
'x-requested-with': 'XMLHttpRequest'
}
superagent
.post(`https://segmentfault.com/api/user/login`)
.query({'_': random})
.set('Referer', 'https://segmentfault.com/user/login')
.set('X-Requested-With', 'XMLHttpRequest')
.set(header)
.type('form')
.send({
username: username,
password: password,
remember: 1
})
.end(function(err, res) {
if (err) {
console.log(err.status);
} else {
console.log('yay got ' + res.status)
cb(null, cookie)
}
})
}
])
直接执行node index phoneNumber password即可登录成功,如果在继续爬取其他接口就会返回not found,求大神帮助
sf_remember
在cookie里面,而且不是httpOnly的,js可以读到