2021-08-17 爬表情包

需要用到cheerio包
cheerio官方文档:https://cheerio.js.org/

  1. 中文文档:https://github.com/cheeriojs/cheerio/wiki/Chinese-README
  2. 中文文档(简书):https://www.jianshu.com/p/629a81b4e013

1:安装
npm install cheerio
2安装axios 用于发送请求
npm install axios

node 启动文件

const cheerio = require('cheerio') //导入cheerio
const axios = require('axios') //导入axios
const fs = require('fs') //导入fs文件
const url = require('url') //**什么意思
const path = require('path')

let httpUrl = 'https://www.doutula.com/article/list/?page=1'
//网页地址
// 获取页面总数
async function getNum() {
    let res = await axios.get(httpUrl)
    let $ = cheerio.load(res.data)
    let btnLength = $('.pagination li').length
    let allNum = $('.pagination li').eq(btnLength - 2).find('a').text() //eq是什么
    // console.log('allNum',allNum); eq选择器:选择器选取带有指定 index 值的元素。
    return allNum
    // 获取页面总数
}


async function spider() {
    // 获取所有的页面总数
    // let allPageNum =await getNum()
    // for(let i=1;i<=2;i++){
    //     getListPage(i)
    // }
    // getListPage(allPageNum)
    num = 1
    timeid = null

    function start() {
        if (num < 3) {
            getListPage(num)
            console.log('num', num);
            num++
        } else {
            console.log('定时器暂停');
            clearInterval(timeid)
        }
    }

    timeid = setInterval(() => {
        console.log(`执行${num}`);
        start()
    }, 1000)
}
spider()
async function getListPage(pageNum) {
    let httpUrl = 'https://www.doutula.com/article/list/?page=' + pageNum
    console.log(`读取第${pageNum}`);
    const res = await axios.get(httpUrl)
    // 对网址进行请求
    // console.log(res.data);
    // 2:cheerio,解析html文档
    // cheerio.load :解析文档
    let $ = cheerio.load(res.data)
    // 获取当前页面的所有表情页面连接
    $('#home .col-sm-9>a').each((i, element) => {
        // $('#home .col-sm-9>a')加上>号,获取子元素,否则会把所有的a标签找出来
        // console.log('i',i,'element',element);需要加$(element) 获取元素之后要用$(元素) 才可以有方法
        let pageUrl = $(element).attr('href');
        let title = $(element).find('.random_title').text()
        // 获取元素的title
        let reg = /(.*?)\d/igs; //**正则什么意思
        title = reg.exec(title)[1]
        // fs.mkdir('./img/' + title)  //  报错:Callback must be a function应该是一个函数
        fs.mkdir('./img/' + title, function (err) {
                if (err) {
                    console.log(err);
                } else {
                    console.log(`第一${pageNum}创建目录成功:` + './img/' + title);
                }

            }),
            //创建目录 mkdir 是什么指令
            // console.log(title);
            parsePage(pageUrl, title)
        // console.log(11);

    })
}



async function parsePage(url, title) {
    // 对url发起请求
    let res = await axios(url);
    // 解析res.data的数据 
    let $ = cheerio.load(res.data)
    $('.pic-content img').each((i, element) => {
        let imgUrl = $(element).attr('src') //获取src链接1
        // let extName = url.extname(imgUrl) 图片没有拓展名
        // console.log(path.parse(imgUrl));  //parse语法
        let extName = path.extname(imgUrl)
        //   extName = path.extname(imgUrl)
        // 视频里没有extName
        // 获取url.的拓展名
        let imgPath = `./img/${title}/${title}-${i}${extName}`
        // 图片的路径和名字
        let ws = fs.createWriteStream(imgPath) //***什么意思  ws   responseType*/
        // 创建写入图片流
        axios.get(imgUrl, {
            responseType: 'stream'
        }).then(function (res) {
            res.data.pipe(ws) //***pipe是什么语法
            console.log('图片加载完成' + imgPath);

            res.data.on('close', function () {
                // 监听close事件
                ws.close()
                // 关闭写入流
            })

        })

    })
}
数据集介绍:野生动物与家畜多目标检测数据集 数据集名称:野生动物与家畜多目标检测数据集 数据规模: - 训练集:1,540张图片 - 验证集:377张图片 - 测试集:316张图片 分类类别: Brown-bear(棕熊)、Chicken(鸡)、Fox(狐狸)、Hedgehog(刺猬)、Horse(马)、Mouse(老鼠)、Sheep(绵羊)、Snake(蛇)、Turtle(龟)、Rabbit(兔)及通用object(物体)共11个类别 标注格式: YOLO格式标注,包含归一化坐标与类别索引,支持目标检测模型训练 数据特性: 涵盖航拍与地面视角,包含动物个体及群体场景,适用于复杂环境下的多目标识别 农业智能化管理: 通过检测家畜(鸡/马/绵羊等)数量及活动状态,辅助畜牧场自动化管理 生态监测系统: 支持野生动物(棕熊/狐狸/刺猬等)识别与追踪,用于自然保护区生物多样性研究 智能安防应用: 检测农场周边危险动物(蛇/狐狸),构建入侵预警系统 动物行为研究: 提供多物种共存场景数据,支持动物群体交互行为分析 高实用性标注体系: - 精细标注包含动物完整轮廓的边界框 - 特别区分野生动物与家畜类别,支持跨场景迁移学习 多维度覆盖: - 包含昼间/复杂背景/遮挡场景 - 涵盖陆地常见中小型动物与禽类 - 提供通用object类别适配扩展需求 工程适配性强: - 原生YOLO格式适配主流检测框架(YOLOv5/v7/v8等) - 验证集与测试集比例科学,支持可靠模型评估 生态价值突出: - 同步覆盖濒危物种(龟类)与常见物种 - 支持生物多样性保护与农业生产的双重应用场景
内容概要:本文档详细介绍了Python实现TSO-ELM(金枪鱼群优化算法优化极限学习机)多输入单输出回归预测的项目实例。极限学习机(ELM)作为一种快速训练的前馈神经网络算法,虽然具有训练速度快、计算简单等优点,但也存在局部最优解和参数敏感性的问题。金枪鱼群优化算法(TSO)通过模拟金枪鱼群体觅食行为,具有较强的全局搜索能力。将TSO与ELM结合形成的TSO-ELM模型,可以优化ELM的输入层和隐藏层之间的权重,提高回归预测的准确性。项目包括数据预处理、TSO优化、ELM回归模型训练和预测输出四个主要步骤,并提供了详细的代码示例。; 适合人群:对机器学习、优化算法有一定了解的数据科学家、算法工程师和研究人员,特别是那些希望深入理解智能优化算法在回归预测任务中的应用的人群。; 使用场景及目标:① 提升ELM在多输入单输出回归预测中的性能,特别是在处理非线性问题时的预测精度;② 解决ELM中的局部最优解和参数敏感性问题;③ 优化ELM的隐层权重和偏置值,提高模型的表达能力和预测能力;④ 在金融、气象、能源、医疗、交通等领域提供更准确的预测模型。; 阅读建议:本文档不仅提供了理论解释,还包含详细的代码实现,建议读者在阅读过程中结合代码进行实践,理解TSO-ELM模型的工作原理,并尝试调整参数以优化预测效果。同时,读者应关注TSO算法在高维复杂问题中的应用挑战,思考如何改进优化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值