source-scraper-dom-runner
Version:
Provides the DomRunner class for scrapping.
56 lines • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const DomRunner_1 = require("./DomRunner");
const source_scraper_core_1 = require("source-scraper-core");
const jsdom_1 = require("jsdom");
class SimpleDomScraper extends source_scraper_core_1.SourceRunnerScraper {
constructor() {
super(...arguments);
this.name = 'dom';
this.domains = [];
this.urlPattern = /.*/i;
this.runner = new DomRunner_1.DomRunner();
this.defaultOptions = {};
}
async scrapFromHtml(url, html, jsdomOptions, options) {
const jsdom = new jsdom_1.JSDOM(html, jsdomOptions);
return this.scrapFromArgs({
url,
jsdom,
window: jsdom.window,
document: jsdom.window.document
}, options);
}
async execWithArgs({ document }) {
const data = {
sources: []
};
const videos = document.getElementsByTagName('video');
for (const video of videos) {
const vsrc = video.src;
if (vsrc)
data.sources.push(new source_scraper_core_1.Source({
url: vsrc,
type: video.getAttribute('type') || undefined
}));
const poster = video.poster;
if (poster)
data.poster = poster;
const sources = video.getElementsByTagName('source');
for (const source of sources) {
const ssrc = source.src;
if (ssrc)
data.sources.push(new source_scraper_core_1.Source({
url: ssrc,
type: video.getAttribute('type') || undefined
}));
}
}
const titles = document.getElementsByTagName('title');
if (titles.length >= 1)
data.title = titles[0].innerText;
return Promise.resolve(data);
}
}
exports.SimpleDomScraper = SimpleDomScraper;
//# sourceMappingURL=SimpleDomScraper.js.map