1
0
Code Issues Pull Requests Projects Releases Wiki Activity GitHub Gitee

添加 牛客网 面试题库 爬取脚本(存为JSON)

This commit is contained in:
程序员小墨 2022-11-06 17:34:16 +08:00
parent f46977d1b7
commit 2878dbf111
3 changed files with 83 additions and 0 deletions

1
nowcoder/exam_interview/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
temp/*.json

View File

@ -0,0 +1,82 @@
const fs = require("fs");
const requestUtils = require("../../utils/requestUtils");
// 爬取的内容https://www.nowcoder.com/exam/interview
const saveTempFile = true;
main();
async function main() {
// 请求参数id
let questionInfo = {
questionJobId: 156,
questionClassifyId: null,
questionId: null,
}
// 获取 Job 的 QuestionClassify
let getQuestionClassifyResult = await getQuestionClassify(questionInfo.questionJobId);
for (let a = 0; a < getQuestionClassifyResult.length; a++) {
const QuestionClassify = getQuestionClassifyResult[a];
questionInfo.questionClassifyId = QuestionClassify.questionClassifyId;
// console.log(questionInfo);
// // 获取 QuestionClassify 的 Filter
// let jobQuestionFilterResult = await jobQuestionFilter(questionInfo.questionJobId, questionInfo.questionClassifyId);
// 获取 QuestionClassify 的 Question
let jobQuestionListResult = await jobQuestionList(questionInfo.questionJobId, questionInfo.questionClassifyId);
for (let b = 0; b < jobQuestionListResult.subjectList.length; b++) {
const Question = jobQuestionListResult.subjectList[b];
questionInfo.questionId = Question.questionId;
console.log(questionInfo);
// 获取 Question 的 QuestionDetail
let jobQuestionDetailResult = await jobQuestionDetail(questionInfo.questionJobId, questionInfo.questionClassifyId, questionInfo.questionId);
}
}
}
async function get(url, functionName) {
let json = await requestUtils.getApiResult(url);
// saveTempFile && fs.writeFileSync(`./temp/${functionName}-1.json`, json);
try {
let response = JSON.parse(json);
// saveTempFile && fs.writeFileSync(`./temp/${functionName}.json`, JSON.stringify(response, null, 2));
// console.log(response);
if (response.code === 0) {
saveTempFile && fs.writeFileSync(`./temp/${functionName}-data.json`, JSON.stringify(response.data, null, 2));
return response.data;
} else {
console.error("请求失败", json);
return null;
}
} catch (err) {
console.error("请求解析失败", err);
return null;
}
}
// 获取分类下面的题目分类 比如 前端工程师 下面的【全部题目】
async function getQuestionClassify(questionJobId) {
let url = `https://www.nowcoder.com/api/questiontraining/interview/getQuestionClassify?questionJobId=${questionJobId}&_=${Date.now()}`
return await get(url, `1 getQuestionClassify-${questionJobId}`);
}
// 获取题目上面的筛选条件
async function jobQuestionFilter(questionJobId, questionClassifyId) {
let url = `https://www.nowcoder.com/api/questiontraining/interview/jobQuestionFilter?questionJobId=${questionJobId}&questionClassifyId=${questionClassifyId}&_=${Date.now()}`
return await get(url, `2 jobQuestionFilter-${questionJobId}-${questionClassifyId}`);
}
// 获取题目列表
async function jobQuestionList(questionJobId, questionClassifyId) {
let url = `https://www.nowcoder.com/api/questiontraining/interview/jobQuestionList?questionJobId=${questionJobId}&questionClassifyId=${questionClassifyId}&page=1&size=50000&_=${Date.now()}`
return await get(url, `3 jobQuestionList-${questionJobId}-${questionClassifyId}`);
}
// 获取题目详情
async function jobQuestionDetail(questionJobId, questionClassifyId, questionId) {
let url = `https://www.nowcoder.com/api/questiontraining/interview/jobQuestionDetail?questionId=${questionId}&questionJobId=${questionJobId}&questionClassifyId=${questionClassifyId}&_=${Date.now()}`
console.log(url);
return await get(url, `4 jobQuestionDetail-${questionJobId}-${questionClassifyId}-${questionId}`);
}

View File