【问题标题】:Cheerio duplicate informationCheerio重复信息
【发布时间】:2020-11-30 14:29:50
【问题描述】:

我创建了一个抓取工具,可以从网站读取一些信息。

这就是我正在阅读的 html:

<div class="event-meta">
   <div class="event-meta-block animate-onscroll">
      <i class="icons icon-calendar"></i>
      <p class="title">Start Date - End Date</p>
      <p>
         02/12/2020                                                 
      </p>
   </div>
   <div class="event-meta-block animate-onscroll">
      <i class="icons icon-clock"></i>
      <p class="title">Start Time - End Time</p>
      <p>
         17:30                                                   
      </p>
   </div>
   <div class="event-meta-block animate-onscroll">
      <i class="icons icon-location"></i>
      <p class="title">Event Location</p>
      <p><a href="http://maps.google.com/?q=41.861483031307,2.6636006533772">Biblioteca Joan Vinyoli</a></p>
   </div>
   <div class="event-meta-block animate-onscroll">
      <i class="icons icon-ticket"></i>
      <p class="title">Cost</p>
      <p>Gratuït</p>
   </div>
   <div class="event-meta-block animate-onscroll">
      <i class="icons icon-globe"></i>
      <p class="title">Website</p>
      <p>
         <a style="word-wrap: break-word;" target="_blank" href="https://www.culturascf.cat/ca/programacio/c/2006-sessio-virtual-maite-carranza--trobada-dels-c.html">https://www.culturascf.cat/ca/programacio/c/2006-sessio-virtual-maite-carranza--trobada-dels-c.html</a>
      </p>
   </div>
   <div class="event-meta-block animate-onscroll">
      <i class="icons icon-share"></i>
      <p class="title">Share This</p>
   </div>
</div>

我想获取活动地点。在那种情况下,我试图获得Biblioteca Joan Vinyoli。我将该数据存储在名为: location:

的字段中
location: $('.event-meta').find('.event-meta-block').eq(2).find(':not(.title)').text().trim(),

复制此信息和位置存储信息如下:Biblioteca Joan VinyoliBiblioteca Joan Vinyoli

这就是获取信息的函数:

async function fetchEvent(url) {
    return axios
    .get(url)
    .then((response) => {
        const $ = cheerio.load(response.data);
        const dataText = $('.event-meta').find('.event-meta-block').eq(0).find(':not(.title)').text().trim().replace(/\s/g, "");
        let dataInici, dataFinal;
        if(dataText.indexOf('-') >= 0) {
            dataInici = moment(dataText.split('-')[0], 'DD/MM/YYYY').toDate();
            dataFinal = moment(dataText.split('-')[1], 'DD/MM/YYYY').toDate();
        }
        else {
            dataFinal = moment(dataText, 'DD/MM/YYYY').toDate();
            dataInici = moment(dataText, 'DD/MM/YYYY').toDate();
        }
        return {
            idEvent: $('link[rel="shortlink"]').attr('href').trim(),
            link: url,
            title: $('#content .col-lg-12  h1').text(),
            content: $('#content .p-tb .event-single .col-lg-9').html(),
            endDate: dataFinal,
            startDate: dataInici,
            hora: $('.event-meta').find('.event-meta-block').eq(1).find(':not(.title)').text().trim().replace(/\s\s+/g, ' '),
            location: $('.event-meta').find('.event-meta-block').eq(2).find(':not(.title)').text().trim(),
            locationUrl: $('.event-meta').find('.event-meta-block').eq(2).find('a').attr("href"),
            preu: $('.event-meta').find('.event-meta-block').eq(3).find(':not(.title)').text().trim(),
            web: $('.event-meta').find('.event-meta-block').eq(4).find(':not(.title)').text().trim(),
        }
    })
    .catch((error) => {
        return null;
    });
}

我不明白为什么要复制信息并存储Biblioteca Joan VinyoliBiblioteca Joan Vinyoli

【问题讨论】:

    标签: javascript html jquery cheerio


    【解决方案1】:

    你想要来自a标签的文本:

    $('p:contains("Event Location") + p a').text()
    

    或者来自p的文字:

    $('p:contains("Event Location") + p').text()
    

    您的操作方式是从a 获取文本以及从p 获取文本。

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2023-03-27
      • 2014-06-14
      相关资源
      最近更新 更多