NodeJs爬虫之FE社区批量水贴
前言
首先感谢EF社区提供的测试平台。这次是博主使用nodejs进行爬虫登陆操作的一次记录。之前博主就在想node不可能没有爬虫支持吧。研究研究果然有,这里咱们使用的是request
模块进行网络请求,使用方法和ajax
差不多。下面列出本次教程中使用到的模块及下载地址吧:request网络请求模块、querystring模块用户提交参数编码、cheerio用于html解析
这次咱们不多说了,直接上代码吧。这里使用了博主封装的HttpHelper
模块,其实就是对request
的提交参数ua等做了处理。
本次代码地址:代码下载
代码
require('./util/TimeHelper');
let hi = require('./util/HttpHelper');
let cheerio = require('cheerio');
let user = {
name: '登陆账户',
pwd: '密码自己填写',
cookie: null
};
//回复方法
function postMessage(id) {
let info = "帖子ID" + id + ",来自易支烟的NodeJs水贴 https://blog.1zyan.cn " + new Date().format('yyyy-MM-dd hh:mm:ss');
hi.Ajax({
url: "https://www.fechat.ink/comments/create",
method: "POST",
form: {
topics_id: id,
content: info
},
headers: {
Cookie: user.cookie
}
}).then((obj) => {
//水贴成功重定向页面
if (obj.statusCode === 302) {
console.log('水贴成功:' + id);
} else {
console.error('水贴失败:' + id);
}
});
}
//取帖子列表
function GetIds(){
//获取帖子列表
for (let page=1;page<=3;page++){
hi.Ajax({
url:"https://www.fechat.ink/?nodeId=&tags=&pages="+page
}).then((res)=>{
let $ = cheerio.load(res.body);
let lis=$(".list_item .info a");
for (let i=0;i<lis.length;i++){
//获取帖子ID
let id=$(lis[i]).attr('href').match(/(?<=\/)([\d]+)/)[0];
//水贴
postMessage(id);
}
});
}
}
hi.Ajax({
url: "https://www.fechat.ink/sign/signIn",
form: {
email: user.name,
password: user.pwd
},
headers: {
"user-agent": `Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36`,
"content-type": "application/x-www-form-urlencoded",
"origin": "https://www.fechat.ink",
"referer": "https://www.fechat.ink/login"
},
method: "POST"
}).then((obj) => {
if (obj.body.includes('登录FE')) {
//解析html得到信息
let $ = cheerio.load(obj.body);
console.log($(".uk-alert-warning p").text());
} else if (obj.statusCode === 302) {
//保存cookie
user.cookie = obj.headers['set-cookie'];
console.log('登陆成功');
return obj;
} else {
console.log(obj.body);
}
}).then(() => {
//开始水贴
GetIds();
});