我正在使用代码从网站上获取所有图像,然后将这些图像作为字符串发送到浏览器,但不起作用!
我正在尝试使用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
答案 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