0

ウェブサイトからすべての画像を取得し、その画像を文字列としてブラウザに送信するコードで作業していますが、機能しません!

http モジュールを使用してサーバーを作成し、ピンタレストの主要ページを取得し、すべての画像タグを照合し、各一致を配列に格納して、最後に送信しようとしています。

これはコードです:

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);

コンソールにエラーはありませんが、1 分後にコンソールに次のように出力されます。

problem with request: socket hang up

4

2 に答える 2

1

すでに問題を解決している場合でも、パッケージcheerioを試す方がはるかに簡単です。これは私が今まで見た中で最高のjQueryのようなパッケージであり、非常に完全です。

たとえば、リモートHTMLをロードしてから、画像をフィルタリングします...

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

また、dataイベントでHTMLを解析すると、タグのチャンクが表示される場合がありますが、これは問題です。

于 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 に答える