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:
- TypeScript
- JavaScript
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;
}
}
const { BaseParser } = require("a-parser-types");
class JS_v2_example_js extends BaseParser {
static 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 = [
['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
Handige links
🔗 Voorbeeld van bestand opslaan op schijf
Voorbeeld dat laat zien hoe bestanden rechtstreeks op de schijf kunnen worden opgeslagen
🔗 Voorbeeld van werken met sessies
Gebruik van sessie-functionaliteit in JavaScript scrapers
🔗 Voorbeeld van gegevens opslaan in een sessie
Demonstratie van de mogelijkheid om willekeurige gegevens in een sessie op te slaan
🔗 Gebruik van results.addElement()
Voorbeeld van het vullen van een gegevensarray met results.addElement() en demonstratie van het verschil met de gewone .push()