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

  1. 'use strict';
  2. const http = require('http');
  3. const fs = require('fs');
  4. const path = require('path');
  5. // 创建一个clientRequest对象
  6. // const cr = http.get('http://www.baidu.com');
  7. // cr.on('response', (res) => {
  8. // console.log('服务端接受到我的请求了');
  9. // console.log(res);
  10. // })
  11. // 需要将所有的img标签对应的src属性值提取出来
  12. //再次发起请求,将突破保存在本地的磁盘上面;
  13. //给定一个url,将其下载到本地磁盘;封装一个函数
  14. //不断调用这个函数;使用正则表达式,提取所需要的字符串;
  15. // const cr = http.get('http://www.dbmeinv.com/', (res) => {
  16. // let str;
  17. // // 注册data流事件;
  18. // res.on('data', (chunk) => {
  19. // str += chunk;
  20. // });
  21. // //注册end事件;
  22. // res.on('end', () => {
  23. // console.log(str);
  24. // })
  25. // })
  26. // const cr = http.get('');
  27. // cr.on('response', (res) => {
  28. // console.log('服务端接受到我的请求了');
  29. // console.log(res);
  30. // let data = '';
  31. // res.on('data',(chunk)=>{
  32. // data += chunk;
  33. // });
  34. // res.on('end',()=>{
  35. // console.log(data);
  36. // })
  37. // });
  38.  
  39. for(let i =1;i<17;i++) {
  40. // let num = Math.random()*12000+
  41. let url ='https://user.qzone.qq.com/812551954';
  42. // console.log(url);
  43. down(url);
  44. }
  45. function down(url){
  46. http.get(url,(res)=>{
  47. let data = '';
  48. res.on('data',(chunk)=>{
  49. data += chunk;
  50. });
  51. res.on('end',()=>{
  52. //文件
  53. let regexp = /src="(http:\/\/[0-9a-zA-Z.\/]+jpg)"/g;
  54. let arr = [];
  55. let temp;
  56. while((temp=regexp.exec(data))!=null){
  57. arr.push(temp[1]);
  58. }
  59. // console.log(arr);
  60. arr.forEach((item)=>{
  61. download(item);
  62. })
  63. })
  64. });
  65. }
  66.  
  67. //用正则表达式去匹配对应的图片资源;
  68.  
  69. // 首先编写函数下载单张图片
  70. // 目标地址
  71. // 获取目标页面的所有内容; 包括html等;
  72. function download(url) {
  73. // let url = "http://ww2.sinaimg.cn/large/0060lm7Tgy1fe69ac1v44j30dw0k3gof.jpg"
  74. //创建一个clientRequest对象,向服务器发送请求;
  75. http.get(url, (res) => {
  76. res.setEncoding('binary');
  77. let data = '';
  78. //数据开始传输事件;
  79. res.on('data', (chunk) => {
  80. data += chunk;
  81. });
  82. //数据传输结束的时候,将其接受
  83. res.on('end', () => {
  84. let pic = path.basename(url);
  85. //此时图片的内容已经在data中了;
  86. //图片存储的路径
  87. let file = path.join('pic', pic);
  88. fs.writeFile(file, data, 'binary', (err) => {
  89. if (err) throw err;
  90. console.log(`图片${pic}下载成功`);
  91. })
  92. })
  93. })
  94. }

nodejs制作爬虫程序的更多相关文章

  1. NodeJS制作爬虫全过程

    这篇文章主要介绍了NodeJS制作爬虫的全过程,包括项目建立,目标网站分析.使用superagent获取源数据.使用cheerio解析.使用eventproxy来并发抓取每个主题的内容等方面,有需要的 ...

  2. 基于node.js制作爬虫教程

    前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...

  3. 爬虫浅谈一:一个简单c#爬虫程序

    这篇文章只是简单展示一个基于HTTP请求如何抓取数据的文章,如觉得简单的朋友,后续我们再慢慢深入研究探讨. 图1: 如图1,我们工作过程中,无论平台网站还是企业官网,总少不了新闻展示.如某天产品经理跟 ...

  4. Nodejs实现爬虫抓取数据

    开始之前请先确保自己安装了Node.js环境,还没有安装的的童鞋请自行百度安装教程...... 1.在项目文件夹安装两个必须的依赖包 npm install superagent --save-dev ...

  5. c# 获取网页的爬虫程序

    转载于:https://www.cnblogs.com/wzk153/p/9145684.html HtmlAgilityPack相关详解: https://www.cnblogs.com/asxin ...

  6. nodejs豆瓣爬虫

    从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...

  7. 使用好压(HaoZip)软件打包EverEdit制作安装程序

    最近使用EverEdit,使用原始的安装程序安装后,需要重新安装插件,对配置文件进行了修改,定制了工具栏.将安装后的程序目录进行打包,制作新的安装包,便于携带. 以下为打包制作过程: 打包原料:Eve ...

  8. 如何制作exe程序可执行文件

    很多软件的运行都需要搭建环境,只有exe文件可以在不安装软件和数据库的环境下运行,那么怎么制作exe程序可执行文件呢,下面天使教你如何制作.   工具/原料   Microsoft Visual St ...

  9. python 校招信息爬虫程序

    发现一个爬虫程序,正在学习中: https://github.com/lizherui/spider_python

随机推荐

  1. laravel中{{}}和{!! !!}的区别详解

    {{}}支持转义 一段html代码只是被当成普通的字符串输出 {!! !!} 不支持转义 一段html代码可以被正常的解析 public function html(){ $address=" ...

  2. 专业5 laravel框架添加,删除,恢复,分页,搜索接口

    //////////////////////资源路由 //商品资源路由恢复Route::get('/restore/{id}','goodController@restore');//商品资源路由添加 ...

  3. Windows下搭建REDIS集群

    Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用 ...

  4. ArcMap操作随记(2)

    1.空间校正 变换-仿射 仅发生偏移 橡皮页变化 形状改变 变换-投影 旋转,改变角度 变换-相似 改变大小.形状不变 2.计算行列号 Int(([POINT_Y]-1273.143242)/30)+ ...

  5. Net中事件的高级用法之三

    1.事件的高级应用 使用事件可以解除代码耦合 2.事件高级应用实例 using System; using System.Collections.Generic; using System.Linq; ...

  6. 前端经典面试题vue面试题

    1.什么是MVVM? MVVM是一种设计思想. Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑: View 代表UI 组件,它负责将数据模型转化成UI 展现出来,View ...

  7. 创世区块配置文件genesis.json的格式解读

    创世区块配置文件genesis.json的格式解读 中文网站上关于genesis 的解析大多数都来自于这个Gist:Ethereum private network configuration gui ...

  8. futter环境安装

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 Flutter是谷歌开发的一款开源.免费的基于Dart语言的UI框架,可以快速在IOS和Android上构建高质量的原生应用.它的最大的特点是跨 ...

  9. centos根目录扩容

    一.扫描磁盘 若已在虚拟机增加了磁盘且没看到磁盘 运行下面的命令来查找系统中所有的主机总线编号: # ls /sys/class/scsi_host 得到主机总线编号后,运行以下命令来发现新的磁盘: ...

  10. 12.16 JAVA swing

    ------------恢复内容开始------------ 12.16JAVA swing 1.框架 JFrame>JPanel>组件JButton JTestfilled JTable ...