From 9d40d85ff3674b3cbbe653247c91f3c928246a08 Mon Sep 17 00:00:00 2001 From: Rajarshee Chatterjee Date: Mon, 3 May 2021 17:48:45 +0530 Subject: [PATCH] preserve line breaks in ReadLightNovel --- package-lock.json | 62 ++++++++++++++++++- package.json | 1 + .../readlightnovel/ReadLightNovelScraper.js | 13 +++- 3 files changed, 73 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8ef4bc9..2a46b85 100644 --- a/package-lock.json +++ b/package-lock.json @@ -549,6 +549,11 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", @@ -949,6 +954,60 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "html-to-text": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-7.1.1.tgz", + "integrity": "sha512-c9QWysrfnRZevVpS8MlE7PyOdSuIOjg8Bt8ZE10jMU/BEngA6j3llj4GRfAmtQzcd1FjKE0sWu5IHXRUH9YxIQ==", + "requires": { + "deepmerge": "^4.2.2", + "he": "^1.2.0", + "htmlparser2": "^6.1.0", + "minimist": "^1.2.5" + }, + "dependencies": { + "domutils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "requires": { + "domelementtype": "^2.2.0" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + } + } + }, "htmlparser2": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.0.tgz", @@ -1430,8 +1489,7 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mkdirp-classic": { "version": "0.5.3", diff --git a/package.json b/package.json index a404de6..8e5e36d 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "cheerio": "^1.0.0-rc.5", "chrome-aws-lambda": "^8.0.2", "express": "^4.17.1", + "html-to-text": "^7.1.1", "node-fetch": "^2.6.1", "puppeteer": "^9.0.0", "request": "^2.88.2" diff --git a/src/en/readlightnovel/ReadLightNovelScraper.js b/src/en/readlightnovel/ReadLightNovelScraper.js index 691e3ef..ba6a40c 100644 --- a/src/en/readlightnovel/ReadLightNovelScraper.js +++ b/src/en/readlightnovel/ReadLightNovelScraper.js @@ -1,6 +1,7 @@ const cheerio = require("cheerio"); const fetch = require("node-fetch"); const request = require("request"); +const { htmlToText } = require("html-to-text"); const baseUrl = "https://www.readlightnovel.org"; const searchUrl = "https://www.readlightnovel.org/detailed-search"; @@ -144,7 +145,17 @@ const chapterScraper = async (req, res) => { $(".block-title > h1").find("a").remove(); const chapterName = $(".block-title > h1").text().replace(" - ", ""); - const chapterText = $(".desc").text(); + + $(".desc") + .find("hr") + .each(function (result) { + $(this).remove(); + }); + + $(".alert").remove(); + + let chapterText = $(".desc").html(); + chapterText = htmlToText(chapterText); let nextChapter = null;