增加抓取日志
This commit is contained in:
parent
bbaa44f8c1
commit
250f17a35a
@ -14,3 +14,8 @@ sites/bookChapter.js
|
|||||||
## 20190426 蛋蛋赞影视资料
|
## 20190426 蛋蛋赞影视资料
|
||||||
|
|
||||||
sites/dandanzan.js
|
sites/dandanzan.js
|
||||||
|
|
||||||
|
|
||||||
|
## 20190508 增加代理数据抓取
|
||||||
|
|
||||||
|
sites/proxy.js
|
||||||
|
42
src/models/spider/CrawlRecord.js
Normal file
42
src/models/spider/CrawlRecord.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import mongoose from 'mongoose';
|
||||||
|
import MovieModel from "../Movies";
|
||||||
|
|
||||||
|
let Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
|
||||||
|
let CrawlRecordSchema = new Schema({
|
||||||
|
// 爬取的链接地址
|
||||||
|
url: {type: String},
|
||||||
|
// 执行爬取任务的class
|
||||||
|
className: {type: String},
|
||||||
|
// 执行爬取任务的方法
|
||||||
|
methodName: {type: String},
|
||||||
|
// 执行爬取任务的方法的参数
|
||||||
|
params: {type: Schema.Types.Mixed},
|
||||||
|
lastTry: {type: Date, default: new Date()},
|
||||||
|
tryCount: {type: Number, default: 0},
|
||||||
|
errCount: {type: Number, default: 0},
|
||||||
|
lastStatus: {type: Boolean, default: false}
|
||||||
|
}, {
|
||||||
|
collection: 'crawl_record',
|
||||||
|
timestamps: true
|
||||||
|
});
|
||||||
|
|
||||||
|
class CrawlRecordClass {
|
||||||
|
static async updateRecord(record) {
|
||||||
|
const query = {url: record.url};
|
||||||
|
const options = {upsert: true, setDefaultsOnInsert:true};
|
||||||
|
let incObj = {tryCount: 1}
|
||||||
|
if (!record.lastStatus) {
|
||||||
|
incObj.errCount = 1;
|
||||||
|
}
|
||||||
|
record['$inc'] = incObj;
|
||||||
|
record.lastTry = new Date();
|
||||||
|
await CrawlRecordModel.update(query, record, options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CrawlRecordSchema.loadClass(CrawlRecordClass);
|
||||||
|
|
||||||
|
let CrawlRecordModel = mongoose.model('CrawlRecord', CrawlRecordSchema);
|
||||||
|
|
||||||
|
export default CrawlRecordModel;
|
@ -1,10 +1,9 @@
|
|||||||
import netUtil from "../utils/net.util";
|
|
||||||
import cheerio from "cheerio";
|
import cheerio from "cheerio";
|
||||||
import stringUtil from '../utils/string.util';
|
import stringUtil from '../utils/string.util';
|
||||||
import Movie from '../models/Movies';
|
import Movie from '../models/Movies';
|
||||||
import generalQueue from '../utils/general.queue';
|
import generalQueue from '../utils/general.queue';
|
||||||
import proxy from './proxy';
|
|
||||||
import proxyUtil from '../utils/proxy.util';
|
import proxyUtil from '../utils/proxy.util';
|
||||||
|
import CrawlRecord from '../models/spider/CrawlRecord';
|
||||||
|
|
||||||
const URL_BASE = 'https://www.dandanzan.com'
|
const URL_BASE = 'https://www.dandanzan.com'
|
||||||
const maxIdx = 100000;
|
const maxIdx = 100000;
|
||||||
@ -14,7 +13,7 @@ const maxIdx = 100000;
|
|||||||
* @param {String} category, 种类, movie: 电影, tv: 电视剧, show: 综艺
|
* @param {String} category, 种类, movie: 电影, tv: 电视剧, show: 综艺
|
||||||
* @param {Number} sortIdx
|
* @param {Number} sortIdx
|
||||||
* */
|
* */
|
||||||
const parseOnePage = async (subLink, category, sortIdx) => {
|
const parseOnePage = async ({subLink, category, sortIdx}) => {
|
||||||
const url = `${URL_BASE}${subLink}`
|
const url = `${URL_BASE}${subLink}`
|
||||||
try {
|
try {
|
||||||
let html = await proxyUtil.getDataProxy(url)
|
let html = await proxyUtil.getDataProxy(url)
|
||||||
@ -61,14 +60,26 @@ const parseOnePage = async (subLink, category, sortIdx) => {
|
|||||||
record.sortIdx = sortIdx;
|
record.sortIdx = sortIdx;
|
||||||
}
|
}
|
||||||
await record.save();
|
await record.save();
|
||||||
|
await CrawlRecord.updateRecord({url: url,
|
||||||
|
className: 'dandanzan',
|
||||||
|
methodName: 'parseOnePage',
|
||||||
|
params: {subLink, category, sortIdx},
|
||||||
|
statusCode: true,
|
||||||
|
})
|
||||||
console.log(`@@@@@ ${sortIdx}: ${subLink} @ ${record.name} saved`);
|
console.log(`@@@@@ ${sortIdx}: ${subLink} @ ${record.name} saved`);
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
|
await CrawlRecord.updateRecord({url: url,
|
||||||
|
className: 'dandanzan',
|
||||||
|
methodName: 'parseOnePage',
|
||||||
|
params: {subLink, category, sortIdx},
|
||||||
|
statusCode: false,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const parseListPage = async (idx, category) => {
|
const parseListPage = async ({idx, category}) => {
|
||||||
let subName = 'dianying';
|
let subName = 'dianying';
|
||||||
let index = 0;
|
let index = 0;
|
||||||
switch (category) {
|
switch (category) {
|
||||||
@ -91,8 +102,20 @@ const parseListPage = async (idx, category) => {
|
|||||||
let html;
|
let html;
|
||||||
try {
|
try {
|
||||||
html = await proxyUtil.getDataProxy(url)
|
html = await proxyUtil.getDataProxy(url)
|
||||||
|
await CrawlRecord.updateRecord({url: url,
|
||||||
|
className: 'dandanzan',
|
||||||
|
methodName: 'parseListPage',
|
||||||
|
params: {idx, category},
|
||||||
|
statusCode: true,
|
||||||
|
})
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
|
await CrawlRecord.updateRecord({url: url,
|
||||||
|
className: 'dandanzan',
|
||||||
|
methodName: 'parseListPage',
|
||||||
|
params: {idx, category},
|
||||||
|
statusCode: false,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
if (html) {
|
if (html) {
|
||||||
const $ = cheerio.load(html);
|
const $ = cheerio.load(html);
|
||||||
@ -101,12 +124,12 @@ const parseListPage = async (idx, category) => {
|
|||||||
$(hrefs).each(function(i, link){
|
$(hrefs).each(function(i, link){
|
||||||
pages.push($(this).attr('href'));
|
pages.push($(this).attr('href'));
|
||||||
});
|
});
|
||||||
for(let page of pages) {
|
for(let subLink of pages) {
|
||||||
try {
|
try {
|
||||||
let sortIdx = maxIdx - (idx * 24 + (index ++) );
|
let sortIdx = maxIdx - (idx * 24 + (index ++) );
|
||||||
generalQueue.addQueue({
|
generalQueue.addQueue({
|
||||||
run: async function () {
|
run: async function () {
|
||||||
await parseOnePage(page, category, sortIdx);
|
await parseOnePage({subLink, category, sortIdx});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@ -136,11 +159,11 @@ const parseListPage = async (idx, category) => {
|
|||||||
}
|
}
|
||||||
const parseAllMovie = async (category) => {
|
const parseAllMovie = async (category) => {
|
||||||
console.time('all');
|
console.time('all');
|
||||||
let allPageNo = await parseListPage(0, category);
|
let allPageNo = await parseListPage({idx: 0, category: category});
|
||||||
console.log('app page is', allPageNo);
|
console.log('app page is', allPageNo);
|
||||||
if (allPageNo > 1) {
|
if (allPageNo > 1) {
|
||||||
for (let i = 1; i <= allPageNo; i++) {
|
for (let i = 1; i <= allPageNo; i++) {
|
||||||
await parseListPage(i, category);
|
await parseListPage({idx: i, category: category});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user