I try to parse data from html to json structure, but I get empty strings. I do it first time.
Here example of repeatable div block:
JavaScript
x
17
17
1
// I try get data with this javascript in browser
2
3
var divs = document.querySelectorAll(".col-md-12"),
4
i = 0,
5
jData = [];
6
for (var div of divs) {
7
var vuzTitles = div.getElementsByTagName(".itemVuzTitle"),
8
obj = {};
9
for (var d of vuzTitles) {
10
obj.title = d.innerText;
11
var as = div.getElementsByTagName(".tooltipq");
12
obj.scores = a.innerText;
13
}
14
jData.push(obj);
15
}
16
jData = JSON.stringify(jData);
17
console.log(jData);
JavaScript
1
58
58
1
<div class="col-md-12 itemVuz">
2
<div class="vuzesfullnorm">
3
<div class="col-md-7">
4
<a href="/vuz/5309">
5
<img class="" src="https://vuzopedia.ru/storage/app/uploads/public/686/aa4/ced/thumb__74_74_0_0_auto.jpeg" data-src="https://vuzopedia.ru/storage/app/uploads/public/686/aa4/ced/thumb__74_74_0_0_auto.jpeg" data-srcset="https://vuzopedia.ru/storage/app/uploads/public/686/aa4/ced/thumb__74_74_0_0_auto.jpeg"
6
alt="Логотип Реавиз в Москве" style="float: left; padding: 0 10px 0 0;max-width: 100px;max-height: 100px;" srcset="https://vuzopedia.ru/storage/app/uploads/public/686/aa4/ced/thumb__74_74_0_0_auto.jpeg">
7
<div class="itemVuzTitle">
8
Медицинский университет Реавиз в Москве
9
</div>
10
</a>
11
<h6 class="fitemVv"><a href="/vuz/5309/programs/bakispec">Программы</a> <a href="/vuz/5309/otziv">Отзывы</a> <a href="/vuz/5309/podrazdeleniya">Факультеты</a> <a href="/vuz/5309/voprosy">Задать вопрос</a></h6>
12
<div class="clearfix opisItemVV">
13
Лечебное дело, Стоматология, Фармация
14
<div style="margin-top: 10px;">
15
<div class="forcheck wantabit" aatrfch="vuz" vuz="5309" id="favv5309">Хочу поступить</div>
16
<div class="wantabit nuLadnoUzhe" id="compare5309" compid="5309">Сравнить</div>
17
<div id="optcompare5309" style="display: none;">
18
<a href="/region/city//services/comparevuz" id="cllicomq5309" style="color: #f2f2f2;">
19
<div class="wantabit nuLadnoUzhe" style="width: 170px; background: #F44336;">Посмотреть сравнение</div>
20
</a>
21
<div class="wantabit delSpItem" id="cllicom5309" compid="5309" style="width: 170px; color: #f2f2f2; background: #F44336;">Убрать из сравнения</div>
22
</div>
23
<div id="optcompareelseone5309" style="display: none;">
24
<a href="/region/city//services/comparevuz" style="color: #f2f2f2;">
25
<div class="wantabit nuLadnoUzhe" style="width: 170px; background: #F44336;">Нужно добавить еще 1 вуз</div>
26
</a>
27
</div>
28
</div>
29
</div>
30
</div>
31
<div class="col-md-5">
32
<div class="col-md-4 info">
33
<div class="forNewSpecTitleParam">
34
<center>Стоимость (руб/год)</center>
35
</div>
36
<center><a class="tooltipq">от 286000 <font class="price"></font> <span class="classic">минимальная стоимость по вузу (руб/год)</span></a> <span class="yearVuzInfoSpan"><a class="tooltipq fixToolT">2022<span class="classic">информация о минимальной стоимости за 2021-2022 год</span></a>
37
</span>
38
</center>
39
</div>
40
<div class="col-md-4 info">
41
<div class="forNewSpecTitleParam">
42
<center>Бюджет</center>
43
</div>
44
нет
45
</div>
46
<div class="col-md-4 info">
47
<div class="forNewSpecTitleParam">
48
<center>Платное</center>
49
</div>
50
<center><a class="tooltipq">от 125<span class="classic">минимальный суммарный проходной балл на платное по вузу</span></a> <span class="yearVuzInfoSpan"><a class="tooltipq fixToolT">2022<span class="classic">информация о платных местах за 2022 и минимальном проходном балле на платное за 2021 год, так как баллы за 2022 становятся известны только после окончания приемной кампании 2022 года</span></a>
51
</span>
52
</center>
53
<center><a class="tooltipq" style="font-size: 11px; color: gray;">670 мест<span class="classic">количество платных мест по вузу</span></a></center>
54
</div>
55
</div>
56
</div>
57
<div class="clearfix"></div>
58
</div>
But I get this:
JavaScript
1
2
1
[{},{},{}, ,{},{},{}]
2
How I can get json text from classes .itemVuzTitle and .tooltipq to json structure with fields name like title and scores? Please, help with this question. It helps save a lot of hours of my life.
Advertisement
Answer
class .col-md-12
is too common and may not contain .itemVuzTitle
, you need to select class .itemVuzPremium
as parent container
JavaScript
1
8
1
var jData = []
2
document.querySelectorAll(".itemVuzPremium").forEach(function(el) {
3
var title = el.querySelector(".itemVuzTitle").textContent.trim(),
4
score = el.querySelector(".tooltipq").textContent.match(/d+/)[0]; // extract digit only
5
jData.push({title: title, score: score})
6
})
7
console.log(JSON.stringify(jData, false, 2))
8
output
JavaScript
1
15
15
1
[
2
{
3
"title": "Университет Синергия",
4
"score": "80000"
5
},
6
{
7
"title": "Российский новый университет",
8
"score": "52000"
9
},
10
{
11
"title": "Московский технический университет связи и информатики",
12
"score": "64000"
13
}
14
]
15