0

我正在编写一个从网站获取所有图像的代码,然后将该图像作为字符串发送到浏览器,但不起作用!

我正在尝试使用 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

4

2 回答 2

1

即使你已经解决了你的问题,尝试使用Cheerio包也容易得多。这是我见过的最好的类似 jQuery 的 Node 包,非常完整。

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

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

此外,在事件中解析 HTMLdata可能会给你标签块,这是一个问题。

于 2013-02-18T14:34:31.693 回答
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

于 2013-02-18T13:13:59.820 回答