从外部站点提取所有图像[Node.js]

时间:2013-02-18 12:53:35

标签: node.js httprequest

我正在使用代码从网站上获取所有图像,然后将这些图像作为字符串发送到浏览器,但不起作用!

我正在尝试使用http模块创建服务器,获取pinterest的主页,匹配所有图像标签,将每个匹配存储在一个数组中,最后发送它。

这是代码:

var http = require('http')
  , options = {
        host: 'www.pinterest.com'
      , port: 80
      , path: '/'
      , method: 'GET'
    }
  , images = [ ]
  ;


http.createServer( function ( request, response ) {

  http.request( options, function ( res ) {
    res.setEncoding( 'utf8' );
    res.on( 'data', function ( chunk ) {

      matches.push( chunk.match(/<img[^>]+src="([^">]+)/g) );

    });
  }).on('error', function(e) {
    console.log('problem with request: ' + e.message);
  });

  response.writeHead( 200, { 'Content-Type' : 'text/html' } );

  response.end( images.toString() );

}).listen(8888);

我在控制台中没有任何错误,但一分钟后,控制台会打印:

problem with request: socket hang up

2 个答案:

答案 0 :(得分:1)

即使您已经解决了问题,尝试使用包cheerio也要容易得多。 这是我见过的最好的类似jQuery的程序包,它非常完整。

您将加载远程HTML,然后过滤图像,例如......

var imageUrl = $("img").attr("src");

此外,解析data事件中的HTML可能会为您提供标记块,这是一个问题。

答案 1 :(得分:0)

我认为你的正则表达式存在问题。无论如何,这种方法会为您带来数据:

var http = require('http')
  , options = {
    host: 'pinterest.com'
  , port: 80
  , path: '/'
  , method: 'GET'
}
  , images = [ ];

http.createServer( function ( request, response ) {


var req = http.get(options, function(res){
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        images.push( chunk.match(/<img[^>]+src="([^">]+)/g) );
    }).on('end', function(){
        response.writeHead( 200, { 'Content-Type' : 'text/javascript' } );
        response.end(images.toString());
    });
});

req.on('error', function(error){
    console.log('error: ' + error.message);
    response.writeHead( 200, { 'Content-Type' : 'text/html' } );
    response.end('error: ' + error.message);
});

}).listen(8888);

我在这里使用http.get方法而不是http.request