gpt4 book ai didi

Node.js HTMLParser 迭代多次

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:37 24 4
gpt4 key购买 nike

我在 Node.js 中使用 http 模块有这个简单的 HTMLParser:

var http = require('http');
var options = {
hostname: 'www.google.com',
port: 80,
path: '/',
method: 'GET'
};

var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
var title1 = chunk.indexOf("<title>");
var title2 = chunk.indexOf("</title>");
var titl = chunk.substring(title1 + 7);
var result = titl.substring(0, titl.indexOf("</title>"));
console.log("Title is : " + result);
});
req.end();
});

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

req.end();

执行时,会迭代多次,因此我在命令行中得到此输出,它会变化,但总是迭代多次。

Title is: Google
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:
Title is:

有什么帮助吗?提前致谢!

最佳答案

当信息传入时,data 事件可能会多次触发。您需要将传入的Buffer(即chunk)存储到您自己的缓冲区中,并在响应完成时进行解析。这就是为什么它被称为 block - 它是部分数据。

var req = http.request(options, function(res) {
res.setEncoding('utf8');
var content = '';
res.on('data', function (chunk) {
content += chunk; // concatenate incoming data chunk to a response buffer
});
res.once('end', function() { // once the response has ended (it is complete)
var title1 = content.indexOf("<title>"); // parse
var title2 = content.indexOf("</title>");
var titl = content.substring(title1 + 7);
var result = titl.substring(0, titl.indexOf("</title>"));
console.log("Title is : " + result);
});
});

您可能还想在 end 上清理响应事件 data 处理程序:

function storeChunk(chunk) {
content += chunk;
}
res.on('data',storeChunk);
res.once('end',function() {
res.removeListener('data',storeChunk);
// ...
});

关于Node.js HTMLParser 迭代多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27072682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com