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}下载成功`);
})
})
})
}
nodejs制作爬虫程序的更多相关文章
- NodeJS制作爬虫全过程
这篇文章主要介绍了NodeJS制作爬虫的全过程,包括项目建立,目标网站分析.使用superagent获取源数据.使用cheerio解析.使用eventproxy来并发抓取每个主题的内容等方面,有需要的 ...
- 基于node.js制作爬虫教程
前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...
- 爬虫浅谈一:一个简单c#爬虫程序
这篇文章只是简单展示一个基于HTTP请求如何抓取数据的文章,如觉得简单的朋友,后续我们再慢慢深入研究探讨. 图1: 如图1,我们工作过程中,无论平台网站还是企业官网,总少不了新闻展示.如某天产品经理跟 ...
- Nodejs实现爬虫抓取数据
开始之前请先确保自己安装了Node.js环境,还没有安装的的童鞋请自行百度安装教程...... 1.在项目文件夹安装两个必须的依赖包 npm install superagent --save-dev ...
- c# 获取网页的爬虫程序
转载于:https://www.cnblogs.com/wzk153/p/9145684.html HtmlAgilityPack相关详解: https://www.cnblogs.com/asxin ...
- nodejs豆瓣爬虫
从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...
- 使用好压(HaoZip)软件打包EverEdit制作安装程序
最近使用EverEdit,使用原始的安装程序安装后,需要重新安装插件,对配置文件进行了修改,定制了工具栏.将安装后的程序目录进行打包,制作新的安装包,便于携带. 以下为打包制作过程: 打包原料:Eve ...
- 如何制作exe程序可执行文件
很多软件的运行都需要搭建环境,只有exe文件可以在不安装软件和数据库的环境下运行,那么怎么制作exe程序可执行文件呢,下面天使教你如何制作. 工具/原料 Microsoft Visual St ...
- python 校招信息爬虫程序
发现一个爬虫程序,正在学习中: https://github.com/lizherui/spider_python
随机推荐
- [BOI2019][第K大问题][暴力剪枝]D2T1 Olympiads
目录 题意 输入格式 输出格式 样例 Input Output 数据范围 时间限制 思路 代码 题意 有\(N\)个人,现在你要从中选出\(K\)个人出来,然后让这\(K\)个人一起参加\(K\)场比 ...
- JS类型判断&原型链
JS类型检测主要有四种 1.typeof Obj 2.L instanceof R 3.Object.prototype.toString.call/apply(); 4.Obj.constructo ...
- 微信网页JSDK接口-wx.chooseImage问题
wx.chooseImage({count: 1, // 默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceTy ...
- Docker——基本组成
Docker架构图 客户端(client):执行命令 服务器(docker_host): 镜像(image):类似于一个模板,通过这个模板来创建容器中 容器(container):利用容器技术,独立运 ...
- 详解数据库三种删除方法: delete drop truncate
Delete Delete :删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行). 删除某一行:Delete from 数据表名称 where 列名称=值: 删除所有行:Del ...
- iscsi挂载
iscsi挂载 1.server端: (1) yum -y ...
- luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp)
luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp) Luogu 题外话: 我可能是傻逼, 但不管我是不是傻逼, 我永远单挑出题人. 题解时间 看数据范围可以确定状压dp. ...
- java小项目
https://blog.csdn.net/redarmy_chen/article/details/11794145#(贪吃蛇) https://blog.csdn.net/likunkun__/a ...
- Spring Cloud与Spring Boot版本匹之间的关系
由于学习的起步较晚,创建项目的时候一直采用的都是较新的springboot,用的2.0.2.RELEASE版本.参照网上的示例进行实验的时候,有时候会才坑,特记录一二以备忘 首先就是SpringBoo ...
- Java中自动装箱与拆箱
一.什么是封装类? Java中存在基础数据类型,但是在某些情况下,我们要对基础数据类型进行对象的操作,例如,集合中只能存在对象,而不能存在基础数据类型,于是便出现了包装器类.包装器类型就是对基本数据类 ...