gpt4 book ai didi

javascript - Nodejs打印两次

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

在这里,我试图从社交媒体网站中提取特定的详细信息,但不幸的是结果或提取的信息打印了两次。所以请给我一个解决办法来解决这个问题。

var http = require('http');

var options = {
host: 'www.quora.com',
path: '/directory/'
};

callback = function (response) {
var str = ''
response.on('data', function (chunk) {
str += chunk;
});

response.on('end', function () {

var match = str.match(/People(.*?)\/div>/);
var match1 = match.toString().match(/<a href="\/directory\/page\/(.*?)">(.*?)<\/a>/g);

for (var index = 0; index < match1.length; index++) {
console.log(match1[index]);
}
});
}

var req = http.request(options, callback);
req.end();

最佳答案

JS中匹配的结果是一个数组,其中

  • 第一个索引是匹配字符串
  • 下一个索引是捕获组。

您的控制台中应该有类似的内容。

<a href="/directory/page/something">
something

查看官方documentation

The returned array has the matched text as the first item, and then one item for each capturing parenthesis that matched containing the text that was captured.

--- 编辑 ---

抱歉造成误解,我建议您使用控制台输出编辑您的问题。我查看了您正在爬行的页面 Quora ,我认为问题的根源在于第一个正则表达式。

您想要选择人员列表,但您的正则表达式会获取页面最后一个结束 div 标记之前的所有文本。

使用chrome或FF,打开页面,打开开发控制台,自己尝试一下:

$('body')[0].innerHTML.match('People(.*)\/div>');

要进行这样的选择,我建议使用 Cheerio 。这是一个非常轻量级的 HTML 解析器,提供基本的 jQuery 功能。它将允许您选择所需的 div,而无需使用正则表达式:

var cheerio = require('cheerio');

...

response.on('end', function () {
$ = cheerio.load(str);
var links = $('.letters').first().find('[href]');
for (var i = 0; i < links.length; i++) {
console.log($(links[i]).attr('href'));
}
}

关于javascript - Nodejs打印两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22140930/

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