Ga naar de hoofdinhoud

Overzicht

De nieuwe JavaScript API v2 is ontworpen om het werk te vereenvoudigen door over te stappen van generatoren naar async/await. Ook zijn in deze API enkele beperkingen van de vorige versie weggenomen, is ondersteuning voor TypeScript toegevoegd en zijn de prestaties verbeterd. We raden aan om deze JavaScript API te gebruiken voor de ontwikkeling van alle nieuwe scrapers.

Om de JavaScript API v2 te gebruiken, volstaat het om uw scraper-klasse over te erven van de basisklasse BaseParser. Laten we de structuur van een scraper-klasse bekijken aan de hand van een voorbeeld:

files/parsers/v2-example/v2-example.ts
import { BaseParser } from 'a-parser-types';

export class JS_v2_example extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
version: '0.0.1',
results: {
flat: [
['title', 'Title'],
['h1', 'H1 Header']
],
arrays: {
h2: ['H2 Headers List', [
['header', 'Header'],
]],
}
},
max_size: 2 * 1024 * 1024,
parsecodes: {
200: 1,
},
results_format: "Title: $title\nH1: $h1\nH2 headers:\n$h2.format('$header\\n')\n",
limitH2Tags: 3,
};

static editableConf: typeof BaseParser.editableConf = [
['limitH2Tags', ['textfield', 'Limit H2 tags']],
];

async parse(set, results) {
const { success, data, headers } = await this.request('GET', set.query);

if (success && typeof data == 'string') {
let matches;
if (matches = data.match(/<title[^>]*>(.*?)<\/title>/))
results.title = matches[1];

if (matches = data.match(/<h1[^>]*>(.*?)<\/h1>/))
results.h1 = matches[1];

if (results.h2) {
let count = 0;
const re = /<h2[^>]*>(.*?)<\/h2>/g;
while(matches = re.exec(data)) {
results.h2.push(matches[1]);
if (++count == this.conf.limitH2Tags)
break;
}
}
}

return results;
}
}

TODO: (next) ## Overerving