parse method

Future<Map<String, Object>> parse({
  1. required Data scrapedData,
  2. required Config config,
  3. Uri? proxyUrl,
  4. bool debug = false,
})

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;
}