NodeJS Bluebird Cheerio Web抓取工具,对已抓取的数据进行正确的索引编制和解析

时间:2018-08-19 03:55:17

标签: promise mapping bluebird cheerio scraper

功能概述 我正在从不安全的站点(http)抓取缩略图URL数据的字符串,下载图像,然后将这些图像上传到安全的网站服务器(https)。我正在使用cheerio和bluebird通过映射的承诺请求来抓取网站URL的列表,我的代码如下所示。我将缩略图URL图像字符串数据从网站URL的推送到存储在“ json”数组中的数组,然后将包含所包含json数据的文件写入suppImages.json文件。

我要解决的当前问题 它们是我正在抓取的网站网址中包含的可变数量的缩略图(每个缩略图约20张)。现在,我的代码已设置为将所有缩略图URL聚合到一个数组中。我想我的代码要做的是将每个网站URL 的特定缩略图URL解析为单独的数组。因此,基本上,不是希望输出看起来像来自所有网站URL的汇总数据的一滴,我希望它们是多个数组,每个数组包含在给定网站URL 。

我的代码

let fs = require('fs')
const requestPromise = require('request-promise');
const Promise = require('bluebird');
const cheerio = require('cheerio');
const suppURL = require('./output.json');

const urls = suppURL.urli;
console.log("Currently reading URLs from buttons of Realty Warp"+urls)

var json = { pictureThumb: []};

scraper = () => Promise.map(urls, requestPromise)
  .map((htmlOnePage, index) => {
    const $ = cheerio.load(htmlOnePage);
        var linksPic = $(".thumb img"); 

        $(linksPic).each(function(i, link){    
            var sop = $(this).attr('src');

        console.log("sop:" + sop)
            json.pictureThumb.push(sop); 

        });

        fs.writeFile('suppImages.json', JSON.stringify(json, null, 6), function(err){



            console.log('wrote file');

        })


        return console.log("URL"+index+':Scrape Complete');

  })
    .then()


    .catch((e) => console.log('We encountered an error' + e));

    scraper()

0 个答案:

没有答案