Невозможно получить данные от HTML Dart - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь получить данные с сайта электронной коммерции. Вот ссылка: https://www.lazada.co.id/catalog/?q=calculator&_keyori=ss&from=input&spm=a2o4j.searchlist.search.go.7b805216TSDxHq

Я сделал это с другими подобными сайтами, однако html для этого сайта немного отличается. Данные, которые я хочу получить: (имя, цена, рейтинг, количество отзывов и URL)

Когда я проверяю веб-сайт, вся информация, указанная выше, находится в этом элементе:

<div id="root">...</div>

Однако в Dart, когда я анализирую html, я получаю пустой элемент:

<div id="root"></div>

Я читаю на других постах, что это происходит из-за динамической информации c (JavaScript ) но я не могу найти способ получить данные в элементе "root". Пожалуйста, помогите!

Ссылки на Dynami c html:

Почему не выполняется синтаксический анализ кода html внутри div?

BeautifulSoup не захватывает динамику c контент

Вот мой код на Dart:

import 'package:http/http.dart' as http;
import 'package:html/parser.dart';

void main() async {
  var headers = {
    'authority': 'www.lazada.co.id',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 OPR/67.0.3575.137',
    'sec-fetch-dest': 'document',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-user': '?1',
    'referer': 'https://www.lazada.co.id/catalog/?_keyori=ss&from=input&q=calculator&spm=a2o4j.home.search.go.57991559Jez22i&style=wf',
    'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8',
    'cookie': 'lzd_cid=41c99659-78e5-4856-c6dc-ae268d456578; t_uid=41c99659-78e5-4856-c6dc-ae268d456578; lzd_sid=161a5313ac0c0f4c8b7f948d0c1c411d; _tb_token_=ee5de5e6beb98; t_fv=1584632399900; cna=UID6FhSQRx0CAbb9+jfBI3Pi; _bl_uid=etkhv8j2skUoXh0Cb4Oe257dIgv8; XSRF-TOKEN=1bcec5aa-c49a-4af3-a5d8-75d708d51717; hng=ID|id|IDR|360; userLanguageML=id; JSESSIONID=B48F2F7542EDCAD5A61580A369068DDA; t_sid=0psfiYB7yUTKUmDzpPVmZgC6PoFnstFd; utm_channel=NA; _m_h5_tk=c07f8393ff08116a934932de690c8582_1587716770763; _m_h5_tk_enc=948d1de0f1a5f9eaba48a2e4dfdf0736',
    'Accept-Encoding': 'gzip',
  };

  var params = {
    'q': 'calculator',
    '_keyori': 'ss',
    'from': 'input',
    'spm': 'a2o4j.searchlist.search.go.7b805216TSDxHq',
  };
  var query = params.entries.map((p) => '${p.key}=${p.value}').join('&');

  var res = await http.get('https://www.lazada.co.id/catalog/?$query', headers: headers);
  if (res.statusCode != 200) throw Exception('http.get error: statusCode= ${res.statusCode}');
  var data = res.body;
  var html = parse(data);
  List element = html.querySelectorAll('#root > div');
  print(element);
}

Результат:

[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...