чтение текста из нескольких ячеек таблицы с одинаковыми именами классов - PullRequest
0 голосов
/ 03 сентября 2018

Мне нужно соскрести конкретную информацию с сайта. Это разные люди в списке, и HTML выглядит так для 1 человека:

<table class="novip">
        <tbody><tr class="novip">
          <td class="novip-portrait-picture" rowspan="5">
            <a class="novip-portrait-picture" href="###">
              <img class="novip-portrait-picture" src="/img/general/default/portrait/cat/default-portrait_m.jpg" alt="Noch kein Bild" onerror="portrait_m_image_failover(this)">
            </a>
          </td>
          <td class="novip-left">
            <a class="novip-firmen-name" href="###" target="_top">
              Dubler&nbsp;Martin
            </a>
          </td>
          <td class="novip-right" rowspan="2">
            <a class="novip" href="/arzt/dubler-martin-bad-zurzach-5330-arzt.html">
              <img class="novip-right" src="/pictures/31814/web/small/31814.png">
            </a>
          </td>
        </tr>
        <tr class="novip">
          <td class="novip-left">
            <span class="novip-left-titel">
              Dr. med. 
            </span>
            <span class="novip-left-fachbezeichnung">
              Facharzt FMH für Allgemeinmedizin, Reiseme
              <a class="novip-left-fachbezeichnung" href="/arzt/dubler-martin-bad-zurzach-5330-arzt.html">
                ...
              </a>
            </span>
            <br>
            address...
            <br>
            Tel:&nbsp;056 249 27 77
            &nbsp;&nbsp; 
        </td></tr>       
      </tbody></table>

Мне нужен текст в классе novip-firmen-name, novip-left-titel и novip-left-fachbezeichnung.

Я попробовал следующее:

request('url', (error, response, html)=>{
if(!error && response.statusCode == 200){
    const $ = cheerio.load(html);

    $('table .novip').each(function(i, value){

        var fullname = $(value).find('.novip-firmen-name').text();
        console.log(fullname);

        var link = $(value).find('.novip-firmen-name').attr('href');
        console.log(link);

        var title = $(value).find('.novip-left-titel').text();
        console.log(title);

        var fachbezeichnung = $(value).find('.novip-left-fachbezeichnung').text();
        console.log(fachbezeichnung);

        console.log('----------------------------------');

    }); 


}
else console.log("error");
});

кажется, что все в порядке, но иногда по какой-то причине оно регистрируется неопределенным. Кроме того, я чувствую, что есть более простой способ получить вышеуказанную информацию. Я никогда не работал с JS и Cheerio раньше, поэтому любая помощь приветствуется. Спасибо

PS: если вам нужна ссылка на сайт или html, дайте мне знать.

1 Ответ

0 голосов
/ 03 сентября 2018

Вы получаете undefined, потому что для каждой таблицы td он пытается найти .novip-firmen-name, etc. Что вам нужно сделать, это проверить, существуют ли эти элементы в данных таблицы, как это.

$('table .novip').each(function(){
  if($(this).find('.novip-firmen-name').length !== 0) {
    console.log($(this).find('.novip-firmen-name').text());
    console.log($(this).find('.novip-firmen-name').attr('href'));
  }

  if($(this).find('.novip-left-titel').length !== 0){
    console.log($(this).find('.novip-left-titel').text());
  }

  if($(this).find('.novip-left-fachbezeichnung').length !== 0){
    console.log($(this).find('.novip-left-fachbezeichnung').text());
  }

  console.log('----------------------------------');

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