美文网首页node专题
TypeScript爬虫案例

TypeScript爬虫案例

作者: Mstian | 来源:发表于2020-08-05 16:12 被阅读0次

    使用TS中的一些语法特性,比如接口等语法,实现一个简单的爬虫示例代码。

    import path from 'path';
    import fs from 'fs';
    import superagent from 'superagent';
    import cheerio from 'cheerio';
    interface ImgInfo {
        imgItem: string | undefined,
        infoItem: string
    }
    interface JsonGenerate {
        count: number,
        data: ImgInfo[],
        time: number
    }
    interface Generate{
        [propName:number]:JsonGenerate
    }
    class Crowller{
        private url = 'https://www.zcool.com.cn/';
        constructor(){
            this.initSpider()
        }
        async initSpider(){ // 初始化
            let html = await this.getRowHtml()
            let result = this.getData(html);
            this.generateJson(result);
        }
        async getRowHtml(){ // 获取html文本
            const result = await superagent.get(this.url)
            return result.text;
        }
        getData(html:string){ // 核心 使用cherrio 获取相应数据并进行组合
            const $ = cheerio.load(html);
            const cardBox = $('.card-box');
            const dataInfo: ImgInfo[] = [];
            cardBox.map((index,item)=>{
                let imgItem = $(item).find('img').attr('src');
                let infoItem = $(item).find('.card-info-title a').text();
                dataInfo.push({imgItem,infoItem})
            })
            return {
                count: dataInfo.length,
                data: dataInfo,
                time: Date.now()
            }
        }
        generateJson(json: JsonGenerate){ // 将获取到的数据存储到本地文件
            let generate:Generate = {}
            let filePath = path.resolve(__dirname, '../data/data.json');
            if(fs.existsSync(filePath)){
                generate = JSON.parse(fs.readFileSync(filePath,'utf-8'));
            }
            generate[json.time] = json;
            fs.writeFileSync(filePath,JSON.stringify(generate));
        }
    }
    let crowller = new Crowller();
    

    相关文章

      网友评论

        本文标题:TypeScript爬虫案例

        本文链接:https://www.haomeiwen.com/subject/roykrktx.html