zoukankan      html  css  js  c++  java
  • nodejs制作爬虫程序

    在nodejs中,可以通过不断对服务器进行请求,以及本身的fs  =》filesystem 模块和clientRequest模块对网站的资源进行怕取,目前只做到了对图片的趴取!视频文件格式各异,有的视频网站上视频可能是加密过的。无法爬取来;

    'use strict';
    const http = require('http');
    const fs = require('fs');
    const path = require('path');
    // 创建一个clientRequest对象
    // const cr = http.get('http://www.baidu.com');
    // cr.on('response', (res) => {
    //     console.log('服务端接受到我的请求了');
    //     console.log(res);
    // })
    // 需要将所有的img标签对应的src属性值提取出来
    //再次发起请求,将突破保存在本地的磁盘上面;
    //给定一个url,将其下载到本地磁盘;封装一个函数
    //不断调用这个函数;使用正则表达式,提取所需要的字符串;
    // const cr = http.get('http://www.dbmeinv.com/', (res) => {
    //     let str;
    //     // 注册data流事件;
    //     res.on('data', (chunk) => {
    //         str += chunk;
    //     });
    //     //注册end事件;
    //     res.on('end', () => {
    //         console.log(str);
    //     })
    // })
    // const cr = http.get('');
    // cr.on('response', (res) => {
    //     console.log('服务端接受到我的请求了');
    //     console.log(res);
    //     let data = '';
    //     res.on('data',(chunk)=>{
    //         data += chunk;
    //     });
    //     res.on('end',()=>{
    //         console.log(data);
    //     })
    // });
    
        for(let i =1;i<17;i++) {
            // let num = Math.random()*12000+
            let url ='https://user.qzone.qq.com/812551954';
            // console.log(url);
            down(url);
        }
        function down(url){
            http.get(url,(res)=>{
                let data = '';
                res.on('data',(chunk)=>{
                    data += chunk;
                });
                res.on('end',()=>{
                    //文件
                    let regexp = /src="(http://[0-9a-zA-Z./]+jpg)"/g;
                    let arr = [];
                    let temp;
                    while((temp=regexp.exec(data))!=null){
                        arr.push(temp[1]);
                    }
                    // console.log(arr);
                    arr.forEach((item)=>{
                        download(item);
                    })
                })
            });
        }
    
    
    //用正则表达式去匹配对应的图片资源;
    
    // 首先编写函数下载单张图片
    // 目标地址
    // 获取目标页面的所有内容; 包括html等;
    function download(url) {
        // let url = "http://ww2.sinaimg.cn/large/0060lm7Tgy1fe69ac1v44j30dw0k3gof.jpg"
        //创建一个clientRequest对象,向服务器发送请求;
        http.get(url, (res) => {
            res.setEncoding('binary');
            let data = '';
            //数据开始传输事件;
            res.on('data', (chunk) => {
                data += chunk;
            });
            //数据传输结束的时候,将其接受
            res.on('end', () => {
                let pic = path.basename(url);
                //此时图片的内容已经在data中了;
                //图片存储的路径
                let file = path.join('pic', pic);
                fs.writeFile(file, data, 'binary', (err) => {
                    if (err) throw err;
                    console.log(`图片${pic}下载成功`);
                })
            })
        })
    }
  • 相关阅读:
    小橙书阅读指南(三)——插入排序
    小橙书阅读指南(二)——选择排序
    小橙书阅读指南(一)——二分查找法
    30分钟带你了解Docker
    消息队列之Kafka——从架构技术重新理解Kafka
    【Mongodb】开启慢查询
    【Azure SQL】数据库性能分析
    【MacBook】常用命令 && 软件安装
    【基准测试】BenchmarkDotNet介绍
    【设计模式】抽象工厂模式
  • 原文地址:https://www.cnblogs.com/qqfontofweb/p/6664094.html
Copyright © 2011-2022 走看看