Http.get частично загружает и анализирует сайт, прежде чем получить HTML во Flutter - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь выполнить веб-анализ в трепетании. Я хочу получить все эпизодические ссылки и номера с определенного сайта https://www2.9anime.to/watch/black-clover-dub.2y44/0wql03

Это мой код для разбора HTML:

    var url = 'https://www2.9anime.to/watch/black-clover-dub.2y44/0wql03';

          http.Response response = await http.get((url));
          dom.Document document = parse(response.body);

List<dom.Element> rapidvideoepisodelinks = document.getElementsByTagName('#servers-container');
List<Map<String, dynamic>> rapidvideoepisodelinkMap = [];
for (var link in rapidvideoepisodelinks) {
        rapidvideoepisodelinkMap.add(
        {
        /////////////////////some logic////////////////////
      });
    }
var rapidvideoepisodejson = json.encode(rapidvideoepisodelinkMap);
rapidvideoepisodelist = (json.decode(rapidvideoepisodejson) as List)
          .map((data) => new Rapidvideoepisodelist.fromJson(data))
          .toList();
      setState(() {
        isLoading = false;
      });

Но дело в том, что загрузка контента эпизода занимает несколько секунд. И http.get загружает сайт слишком рано, прежде чем эта часть будет загружена. Из-за этого я не могу разобрать его полностью. Эта область, содержащая эпизод, даже не загружается, поэтому ее HTML не анализируется. Все остальное работает нормально, за исключением таких областей, которые требуют дополнительного времени для загрузки.

enter image description here

enter image description here

Есть ли способ решить эту проблему? Например, разбор сайта после его полной загрузки или что-то в этом роде.

Любая помощь очень ценится.

1 Ответ

1 голос
/ 20 марта 2019

Ваше мышление не совсем правильно. Причина, по которой вы не можете разобрать это НЕ из-за частичной загрузки. http.get получает файл HTML. Это все. Вы только получаете файл HTML, и вы получили его. В браузере вы видите не тот HTML-файл. Ваш браузер сначала получает файл HTML, а затем находит то, что он должен загрузить из файла HTML, а затем загружает файлы JPG, файлы CSS, сценарии JS и т. Д. *

Содержимое, которое вы пытаетесь проанализировать, управляется с помощью сценария JS внутри браузера. Вы не можете достичь этого с http.get. Я не уверен, как добиться того, что вы хотите во флаттере. Вам может понадобиться какой-нибудь псевдо-браузер в dart, если он есть, чтобы загрузить URL, а затем проанализировать полученный HTML. Вы никогда не сможете сделать это с http.get, потому что вы получите файл HTML, но вы на самом деле не ищете этот файл HTML. Я не уверен, можете ли вы понять, что я имею в виду или нет.

...