Я пытаюсь получить данные с сайта электронной коммерции. Вот ссылка: 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);
}
Результат:
[]