添加 牛客网 面试题库 爬取脚本(存为JSON)
This commit is contained in:
parent
f46977d1b7
commit
2878dbf111
1
nowcoder/exam_interview/.gitignore
vendored
Normal file
1
nowcoder/exam_interview/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
temp/*.json
|
82
nowcoder/exam_interview/main.js
Normal file
82
nowcoder/exam_interview/main.js
Normal 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}`);
|
||||
}
|
0
nowcoder/exam_interview/temp/.gitkeep
Normal file
0
nowcoder/exam_interview/temp/.gitkeep
Normal file
Loading…
Reference in New Issue
Block a user