Newbie~ 2022-08-28 23:53 采纳率: 50%
浏览 25
已结题

node的爬取网页图片

使用node爬区一个网站当中所有的图片的链接,不用下载,该怎么样写代码

  • 写回答

1条回答 默认 最新

  • 音药 2022-08-29 08:39
    关注

    给你一个案例

    const http = require("http");
    const fs = require('fs');
    const cheerio = require('cheerio');
    const request = require('request');
    let iconv = require("iconv-lite");
    let index = 13;
    // const url = 'http://www.netbian.com'
    const url = 'http://www.netbian.com/index_13.htm'
    
    const getData = (url) => {
        http.get(url, (res) => {
            let buffer = [];
            let bufferLength = 0;
            res.on("data", chunk => {
                buffer.push(chunk);
                bufferLength += chunk.length;
            });
            res.on("end", () => {
                // 现在将所有buffer组合为一个整体buffer
                let bufferData = Buffer.concat(buffer, bufferLength);
                // 使用 iconv 以 GBK 编码转换为字符串。
                var html = iconv.decode(bufferData, "GBK");
                // console.log(html); // 现在得到的页面内容就没有乱码的了。
                var $ = cheerio.load(html);
                $('.list img').each((i, el) => {
                    const text = $(el).attr('alt').replace(/\s*/g,"")
                    const img_url = $(el).attr('src')
                    console.log(text,'=====',  index + '_' + (i+1))
                    console.log(img_url)
                    request.head(img_url, function(error, res,body){
                        if(error){
                            console.log('失败了')
                        }
                    });
                    //通过管道的方式用fs模块将图片写到本地的images文件下
                    request(img_url).pipe(fs.createWriteStream('./images/' + index + '_' + (i+1) + '.jpg'));
                })
                if (index > 1228) return;
                index++;
                getData(`http://www.netbian.com/index_${index}.htm`);
            });
        });
    }
    
    fs.stat('images', (error,stats) => {
        if (error) {
            fs.mkdir("images", (err) => {
                if (err) console.log('err', err)
                console.log('创建目录成功');
            });
        }
    })
    getData(url)
    
    
    
    
    ```javascript
    
    
    
    

    ```

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月22日
  • 已采纳回答 9月14日
  • 修改了问题 8月29日
  • 创建了问题 8月28日

悬赏问题

  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面