Cheerio не любит html без правильных тегов (кто на самом деле?).Я пытаюсь очистить некоторые меню, и контент, который я хочу, находится между элементами в html.Есть ли способ разобрать каждый из них и сохранить их как куски, используя cheerio?Меню представляет собой 5-дневное меню с различными курсами ниже каждого дня.Элемент (дни) находится на том же уровне (братья и сестры), что и пункты меню.
Вот сложная часть: пункты меню не имеют никаких атрибутов.Это «необработанный» текстовый узел.
Я не могу изменить html.
Вот структура html, обратите внимание, что необработанные текстовые узлы являются «родственными» для «заголовков».
<div class="meny" style="clear:left;line-height:1.6em;padding-bottom:2em;">
<strong>Måndag</strong>
<br>Klassisk wallenbergare på kalvfärs serveras med gräddsås, lingonsylt, och potatismos
<br>Dragonbrässerad fiskfilé serveras med basilika och ruccolacrème samt kokt potatis
<br>Pasta med strimlad ryggbiff, champinjoner och lök i krämig grönpepparsås
<br>Pasta vegetale med rostad paprika, lök och purjolök i krämig örtsås
<br>Grillad högrevsburgare serveras med ost, bacon, briochebröd och country fries
<br>
<br><strong>Tisdag</strong>
<br>Stekt fläsk med löksås, bruna bönor eller raggmunk och lingon
<br>Thailändsk biffgryta med citrongräs, kokosgrädde, limeblad, wokgrönsaker och rödcurry
<br>Hollandaisebakad torskfilé på purjolöksbädd serveras med vitvinssås och kokt potatis
<br>Pasta penne med bacon, ädelost, champinjoner, blomkål och grädde
<br>Vegetarisk Thaigryta serveras med jasminris
<br>Grillad högrevsburgare serveras med ost, bacon, briochebröd och country fries
<br>
<br><strong>Onsdag</strong>
<br>Kycklingschnitzel serveras med barbequesås och rostad kulpotatis
<br>Honung och enbärsbakad laxfilé serveras med citruscrème och örtslungad potatis
<br>Pasta med strimlad kycklingfilé i rosmarin och citronsås
<br>Karibisk falafelrulle med salsa och vitlöksdressing
<br>Grillad högrevsburgare serveras med ost, bacon, briochebröd och country fries
<br>
<br><strong>Torsdag</strong>
<br>Grillad karréskiva serveras med bearnaisesås och klyftpotatis
<br>Stekt dubbelpanerad fiskfilé serveras med dill och rödlöksröra
<br>Pasta med strimlad fläskfilé, paprika och lök i krämig gorgonzolasås
<br>Grillad högrevsburgare serveras med ost, bacon, briochebröd och country fries
<br>
<br><strong>Fredag</strong>
<br>LÅNGFREDAG STÄNGT</div>
желаемый вывод json, "день" для i18n ...
weekMenu = {
name: "menuname",
weekDayMenus: {
monday: {
day: "",
dayMenu: "",
},
tuesday: {
day: "",
dayMenu: "",
},
wednesday: {
day: "",
dayMenu: "",
},
thursday: {
day: "",
dayMenu: "",
},
friday: {
day: "",
dayMenu: "",
},
}
};
Вот то, что я пробовал до сих пор, само собой разумеется, это не работает, так как тольковыводит заголовки.Он не включает дочерние элементы текстового узла с content (), так как они являются братьями и сестрами, а не детьми.
cheeriojs
var a = $('div.meny')
.clone()
.remove().eq(0) //remove second menu div
.find('strong').eq(0) //point to first 'day'
.siblings() //select the other days
.remove() //remove the other days
.end() //move pointer back to the start
.contents() //get the text nodes associated with the selected 'header'
.filter(function (idx, elem) {
console.log(elem.data)
return elem.type === 'text';
})
.end()
.text()