Javascript 扫描网站上重复的关键字,并创建一个数组
我想扫描一个网站,过滤掉网站中最重复的关键字 例如,如果我要扫描,那么我希望有一个包含关键字的数组,如:Javascript 扫描网站上重复的关键字,并创建一个数组,javascript,puppeteer,Javascript,Puppeteer,我想扫描一个网站,过滤掉网站中最重复的关键字 例如,如果我要扫描,那么我希望有一个包含关键字的数组,如: [“衣服”、“鞋子”、“裤子”、“t恤”] 等等 我的想法是首先使用$eval()获取中的所有文本内容,并将其拆分为一个数组,然后使用.reduce()计算一个单词在网站上出现的次数并对其进行排名 这是一种方法还是有一个简单的解决方案?我认为最好的方法是使用page.evaluate(),然后在内部获取body的outerText,它将返回所有文本内容,而不包含标签和内容。之后,您可以将整个
[“衣服”、“鞋子”、“裤子”、“t恤”]
等等
我的想法是首先使用$eval()
获取
中的所有文本内容,并将其拆分为一个数组,然后使用.reduce()
计算一个单词在网站上出现的次数并对其进行排名
这是一种方法还是有一个简单的解决方案?我认为最好的方法是使用
page.evaluate()
,然后在内部获取body的outerText
,它将返回所有文本内容,而不包含标签和内容。之后,您可以将整个文本转换为小写(使用toLowerCase()
),并在空格、换行符或某些其他符号(如括号等)上拆分字符串。您可以使用对象来存储单词计数的键值,以保持重复单词的计数。因此,本质上,您的代码如下所示:
let data = await page.evaluate(() => {
//acquire the text in body
let content = document.querySelector("body").outerText;
//convert text to lowercase and split on whitespaces and newlines
let textArray = content.toLowerCase().replace(/[^A-Za-z0-9]/gm, " ").split(/\s+/gm);
//object to map text to count
let text_to_count_map = {};
textArray.forEach(t => {
if(text_to_count_map[t])
text_to_count_map[t] ++;
else
text_to_count_map[t] = 1;
});
return text_to_count_map;
})
现在,您的数据
变量将包含正文中每个单词的一个对象作为关键字,其对应值将是它们在正文中的频率。你可以随心所欲地使用它
编辑1
在阿迪达斯网站上对此进行了测试,能够将身体中的所有单词收集到textArray
variable的数组中
最终编辑
使用更简单的regexp筛选不包含字母的任何内容([^a-Za-z0-9]
)
似乎效果不错。但是我得到的是
null
而不是数字。注意这里我在Node.js中使用它。您是否正在检查从page.evaluate()
返回的data
变量?我已经找到了它。您需要交换刚刚进行编辑的foreach循环中的if-else
语句。我做了一个合乎逻辑的回答。我的巴迪增加了一个额外的过滤器。如果(t.length<3),则返回
,以过滤出最多2个字符的单词