1 Star 0 Fork 0

墨染流离殇ღ/exback

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
index.js 2.40 KB
一键复制 编辑 原始数据 按行查看 历史
Tlaster 提交于 2019-07-26 16:06 +08:00 . update
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const axios = require('axios');
const axiosRetry = require('axios-retry');
const pLimit = require('p-limit');
const fs = require('fs').promises;
const args = process.argv.slice(2);
let from = 0;
if (args[0] != undefined && args[0] != null && !isNaN(args[0])) {
from = parseInt(args[0]);
}
const interval = 100;
let to = from + interval;
const limit = pLimit(3);
axiosRetry(axios, { retries: 1000, retryDelay: retryCount => retryCount * 500 });
(async () => {
while (true) {
await download();
from += interval;
to += interval;
}
})();
async function download() {
const tasks = [...Array(to - from).keys()].map(async it => {
return limit(() => getMenuItem(it + from));
});
console.log(`getting from ${from} to ${to} ...`);
const menu = await Promise.all(tasks);
console.log('writting files...');
await fs.writeFile(`menu_from_${from}_to_${to}.json`, JSON.stringify(menu), 'utf8');
console.log(`complete from ${from} to ${to}!`);
}
async function getMenuItem(it) {
const cookie = await fs.readFile('.cookie', 'utf8');
console.log(`getting ${it} page...`)
const url = `https://exhentai.org/?page=${it}`;
const response = await axios.get(url, {
headers: {
Cookie: cookie
},
});
const { document } = (new JSDOM(response.data)).window;
return Array.from(document.querySelectorAll('.itg.glte>tbody>tr')).slice(1).map(doc => {
return {
id: doc.querySelector('.gl2e>div>a').href.trim().match(`\\d+`)[0],
title: doc.querySelector('.gl4e.glname>.glink').textContent.trim(),
type: doc.querySelector('.gl3e>div:first-of-type').textContent.trim(),
time: doc.querySelector('.gl3e>div:nth-of-type(2)').textContent.trim(),
link: doc.querySelector('.gl2e>div>a').href.trim(),
img: doc.querySelector('.gl1e img').src.trim(),
uploader: doc.querySelector('.gl3e>div:nth-of-type(4)').textContent.trim(),
tags: Array.from(doc.querySelector('.gl4e.glname>div:last-of-type').querySelectorAll('tr')).map(tr => {
return {
name: tr.querySelector('td:first-of-type').textContent.trim(),
values: Array.from(tr.querySelectorAll('td:last-of-type>div')).map(gt => gt.textContent.trim())
}
})
};
});
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/dlzc/exback.git
git@gitee.com:dlzc/exback.git
dlzc
exback
exback
master

搜索帮助