【问题标题】:scraping nested xml using cheerio使用 Cheerio 抓取嵌套的 xml
【发布时间】:2013-11-19 23:49:45
【问题描述】:

我正在尝试使用cheerio 废弃一些PubMed 数据。以下脚本可以正常工作,但是当某些 xml 标记不存在时,它会生成错误排序的输出。

var request = require('request'),
cheerio = require('cheerio');
request('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmode=xml&id=23545583,23103438', 
  function(error, response, body) {
    var $ = cheerio.load(body);
    for (var i = 0; i < $('PubmedArticle').length; i++) {
        console.log($('PubmedArticle PMID').slice(0).eq(i).text());
        console.log($('PubmedArticle DateCreated Year').slice(0).eq(i).text());
        console.log($('PubmedArticle ArticleTitle').slice(0).eq(i).text());
        console.log($('PubmedArticle Abstract AbstractText').slice(0).eq(i).text());
      };
});

在此示例中,摘要在第一个标题下方输出,而不是第二个,因为第一篇文章不包含摘要。

【问题讨论】:

    标签: xml node.js scrape cheerio pubmed


    【解决方案1】:

    最后,我想我可以使用不同的策略来克服这个问题:

    var $ = require('cheerio')
    var request = require('request')
    
    function gotXML(err, resp, xml) {
      if (err) return console.error(err)
      var parsedXML = $.load(xml)
      parsedXML('PubmedArticle').map(function(i, article) {
        console.log($(article).find('pmid')[0].children[0].data);
        console.log($(article).find('articletitle')[0].children[0].data);
        console.log($(article).find('datecreated year')[0].children[0].data);
        if ($(article).find('abstracttext').length>0) {
          console.log($(article).find('abstracttext')[0].children[0].data);
        };
      }
      );
    }
    
    var domain = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&retmode=xml&id=23545583,23103438';
    request(domain, gotXML);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多