html中script使用外链,nodejs初学,在学做一个网页爬虫,想请教如何用Nodejs将爬下来的html中的script、img、link、a等标签的外链也爬下来(保持更新直至制作成功)...

3/7/2016

86a31789ca2879a822b60974078d9519.png

这是经理帮我们分析的一个爬虫制作过程。

7e8cc699ad1dcdaa705cde2f0eac751d.png

这是初步的访问html页面,但是这个跟直接查看源代码的效果是一样的。。。我们制作爬虫的目的是将一个网站的静态页面爬下来,改成我们自己要做的网站,我感觉我讲的都不清楚,请各位前辈帮忙分析一下我应该怎么入手

3/8/2016

目前进度做到分类(js/css/img)和下载

74fc17f3f0cfe8e65a8a37f45b05eb65.png

上图是其中的script分类,但是在下载的时候,由于这些js/css/imgt都是外链,下载的时候出现下图

b3ca05784a03763b9f8422c68642aea3.png

目前正在寻找这解析外链的资料,感觉应该不难,有前辈提示吗?

现在是下午16:18,贴上目前的代码和进度

var http = require(‘http’);

var cheerio = require(‘cheerio’);

var request = require(‘request’);

var path = require(‘path’);

var fs = require(‘fs’);

var url = ‘http://demos.q-themes.net/designr/v1.3/’;

request(url,function (error,response,body) {

if(!error && response.statusCode == 200){

console.log(body);

acquireData_3(body);

}

});

function acquireData_3 (data) {

var $ = cheerio.load(data); //cheerio解析data

var images = $(‘img[src]’).toArray();

console.log(images.length);

var len = images.length;

for (var i=0;i

//console.log(images[i]);

var imgsrc = images[i].attribs.src;

console.log(imgsrc);

var filename = parseUrlForFileName(imgsrc);

downloadImg(imgsrc,filename,function() {

console.log(filename+‘done’);

});

}

}

function parseUrlForFileName (address) {

return filename;

}

var downloadImg = function (uri,filename,callback) {

request.head(uri,function (err,res,body) {

if(err){

console.log(‘err:’+err);

return false;

}

console.log(‘res:’+res);

request(uri).pipe(fs.createWriteStream(‘image/’+filename)).on(‘close’,callback);

});

};

这段代码还是做不到下载外链,我的思路就是用 path.join 这个API来将外链地址组合起来,就是这段:

function parseUrlForFileName (address) {

return filename;

** 但是我的写法肯定错了,有前辈帮忙指出来吗?还是我用的API不对?**

3/21/2016

天哪,刚刚复制时间的时候,我发现我居然是7号开始做的,也就是说我花了一个礼拜的时间还没做完。。。惭愧,得加油了!

下面是url组合成功的结果图

0112c064b59b57ee2ea97fe1a59de1ac.png

先忽略里面的err,可以看到地址已经拼接成功了,下面贴代码,用的组合方法是url.resolve(‘http://demos.q-themes.net/designr/v1.3/’,imgsrc);

function acquireData_3 (data) {

var $ = cheerio.load(data); //cheerio解析data

var images = $(‘img[src]’).toArray(); //contain img script

console.log(images.length);

var len = images.length;

for (var i=0;i

//console.log(images[i]);

var imgsrc = images[i].attribs.src;

console.log(imgsrc);

var filename = url.resolve(‘http://demos.q-themes.net/designr/v1.3/’,imgsrc);

console.log(filename);

downloadImg(imgsrc,filename,function() {

console.log(filename+’ 下载成功’);

});

}

}

var downloadImg = function (uri,filename,callback) {

request.head(uri,function (err,res,body) {

if(err){

console.log(‘err:’+err);

return false;

}

console.log(‘res:’+res);

request(uri).pipe(fs.createWriteStream(‘image/’+filename)).on(‘close’,callback);

});

};

显然错误原因就是downloadImg方法中uri的路径还是imgsrc也就是没有拼接的地址,修改过几次不同的方式,但是都没成功,所以先继续看request的API,有前辈知道怎么改的话帮忙提出来,谢谢!

这是用组合出来的地址访问到的

acaabac2d95faa8da55319b98a20c485.png

这是目前的错误提示,图下面贴代码

48f768c311328e4bc2ad4b7e5c96b8f7.png

function acquireData_3 (data) {

var $ = cheerio.load(data); //cheerio解析data

var images = $(‘img[src]’).toArray(); //contain img script

console.log(images.length);

var len = images.length;

for (var i=0;i

//console.log(images[i]);

var imgsrc = images[i].attribs.src;

console.log(imgsrc);

var filename = url.resolve(‘http://demos.q-themes.net/designr/v1.3/’,imgsrc);

//console.log(filename);

var imgsrc_0 = url.resolve(‘http://demos.q-themes.net/designr/v1.3/’,imgsrc);

console.log(imgsrc_0);

downloadImg(imgsrc_0,filename,function() {

console.log(filename+’ 下载成功’);

});

}

}

var downloadImg = function (uri,filename,callback) {

request(uri,function (err,res,body) {

if(err){

console.log(‘err:’+err);

return false;

}

console.log(‘res:’+res);

request(uri).pipe(fs.createWriteStream(‘image/’+filename)).on(‘close’,callback);

});

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个牙科智慧管理网页使用了Node.js和HTML进行开发,具有以下技术特点: 1. 前端开发使用HTMLHTML是一种标记语言,用于构建网页的结构和内容。它提供了丰富的标签和属性,可以创建用户友好的界面,并且与其他技术集成相对简单。 2. 后端开发使用Node.js:Node.js是一个基于Chrome V8引擎的JavaScript运行环境,可以在服务器端运行JavaScript代码。它具有高效的I/O操作和非阻塞事件驱动的特性,适用于构建高性能、可扩展的网络应用。 3. 异步编程:Node.js使用异步编程模型,通过回调函数和事件驱动机制来处理并发请求。这种方式使得网页能够同时处理多个请求,提高了系统的吞吐量和响应速度。 4. RESTful API:为了实现数据的交互和传输,该网页可能采用RESTful API架构。RESTful API是一种基于HTTP协议的Web服务架构,可以方便地实现数据的增删改查操作。 5. 数据库:该网页可能使用数据库来存储和管理牙科智慧管理系统的数据。常见的选择可以是关系型数据库如MySQL或非关系型数据库如MongoDB,根据具体需求进行选择。 6. 安全性:对于敏感数据的处理,该网页可能会采取一些安全措施,如使用加密技术保护数据传输的安全性,实施访问控制和身份验证来保护系统的安全性。 总之,这个牙科智慧管理网页使用了Node.js和HTML作为主要技术栈,通过前后端分离的方式实现高性能、可扩展的应用,同时采用异步编程和RESTful API等技术来提供良好的用户体验和数据交互功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值