Как я могу извлечь номер в абзаце, который застрял между двумя <b>-Tag с node.js и cheerio? - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь получить число 18 267 в следующем html коде:

<div class="mod mod-text" id="-1199962081">   

<article class="clearfix">  

<h2>Current situation in Switzerland<br></h2>

<h3>2.4.2020, 8 am, cases confirmed in Switzerland:</h3>

<p><b>No. of people tested positive (for coronavirus):</b>18,267
<b><br>Deaths:</b> 432 people</p>
<p>blabla</p>
</article>
</div>

Для этого я попытался использовать следующий код:

axios.get(url).then((res) => {
        const $ = cheerio.load(res.data);
        $('#-1934206868').children().children('p').each((index,element) => {
            const text = $(element).text();
            textElements[index] = {text};
        });
        console.log(textElements[2]);
    });

Но если я попробую вот так я получаю следующий вывод

{
  text: 'No. of people tested positive (for coronavirus): 18 267\n' +
    ' Deaths: 432 people'
}

, что подводит меня к моему вопросу: как я могу просто получить номер из этого абзаца вместо целого блока с обоими тегами? Или, альтернативно: как я могу затем разобрать объект, полученный из моего кода, в строку, которую можно разделить, чтобы извлечь число?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Вы не можете выбирать текстовые узлы с помощью cheerio, поэтому вам нужно использовать чистый js в определенный момент:

$('b')[0].nextSibling.data
0 голосов
/ 02 апреля 2020

Хотя ваш код html, а не xml, что-то вроде должно работать:

var DOMParser = require('xmldom').DOMParser;
var doc = new DOMParser().parseFromString('[your code above]' ,'text/xml');
var xpath = require('xpath');
var nodes = xpath.select("//p/text()", doc)

console.log(nodes[0].toString())

Вывод:

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