parse method
Entrypoint
Implementation
Future<Map<String, Object>> parse({
required Data scrapedData,
required Config config,
Uri? proxyUrl,
bool debug = false,
}) async {
/// Root parsers
List<Parser> rootParsers = [];
/// Find if target is available for specified URL
printLog('Parser: Fetching target...', debug, color: LogColor.blue);
UrlTarget? target = fetchTarget(config.urlTargets, scrapedData.url);
if (target == null) {
printLog('Parser: Target not found!', debug, color: LogColor.red);
throw WebScraperError('Unsupported URL');
} else {
printLog('Parser: Target found!', debug, color: LogColor.green);
}
/// Set all parsers
List<Parser> allParsers = [];
for (final p in config.parsers[target.name]!) {
allParsers.add(p);
}
/// Set _root parsers
rootParsers = childFinder('_root', allParsers);
extractedData.addAll({"url": scrapedData.url});
/// Start parsing
Map<String, Object> parsedData = await distributeParsers(
allParsers: allParsers,
rootParsers: rootParsers,
parentData: scrapedData,
proxyUrl: proxyUrl,
debug: debug,
);
if (!parsedData.containsKey('url')) {
parsedData.addAll({'url': scrapedData.url.toString()});
}
return parsedData;
}