和我想象的还是有些差距的,可能程序并不是太完善,然后就可以把数据导入到任何一个在线词云里面了
完整代码
const https=require(‘https’);
const fs=require(‘fs’);
const request=require(‘request’);
const async=require(‘async’);
const cheerio = require(‘cheerio’);
const nodejieba = require(‘nodejieba’);
const startPage =0;//开始页
const endPage = 4;//结束页
const keyWord = “”;//关键词
const keyWord2 = “前端”;
let page=startPage;
let i=0;
//初始url
const url={
hostname: ‘www.nowcoder.com’,
path: ‘/discuss?type=2&order=’ + startPage,
headers: {
‘Content-Type’: ‘text/html’,
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36’,
}
}
let urlList=[];//存储图片页面地址
//获取图片所在页面
function getUrl(url){
//采用http模块向服务器发起一次get请求
https.get(url,function(res){
var html=‘’;
//res.setEncoding(‘binary’);
//监听data事件,每次取一块数据
res.on(‘data’,function(chunk){
html+=chunk;
});
res.on(‘end’,function(){
var $ = cheerio.load(html); //采用cheerio模块解析html
$(‘li .discuss-main.clearfix’).each(function(){
var title=$(this).children().first().text();
if(title.indexOf(keyWord2)>=0){
var search=$(this).children().first().attr(‘href’);
//console.log(search);
let nextLink = “https://www.nowcoder.com” + search;
urlList.push(nextLink);
}
})
page++;
if(page<=endPage){
let tempUrl=‘https://www.nowcoder.com/discuss?type=2&order=’ + page;
getUrl(tempUrl);
}else{
fetchPage();
}
})
}).on(‘err’,function(err){
console.log(err);
})
}
function fetchPage(){
//异步控制并发
async.mapLimit(urlList,5,function(url,callback){
https.get(url,function(res){
//console.log(url);
let html=‘’;
//res.setEncoding(‘binary’);
res.on(‘data’,function(chunk){
html+=chunk;
})
res.on(‘end’,function(){
//console.log(html);
var $ = cheerio.load(html); //采用cheerio模块解析html
var content = $(‘.post-topic-des’).text().trim();
//console.log(content);
appendText(content);
})
}).on(‘err’,function(err){
console.log(err);
});
callback(null,‘成功’);
},
function(err,result){
if (err){
console.log(err)
}
else{
console.log(‘结束’);
wordCluod();
}
})
}
function appendText(text){
fs.appendFile(‘./data/word.txt’, text, ‘utf-8’, function (err) {
if (err) {
console.log(err);
}
});
}
// 生成词云数据
function wordCluod(){
fs.readFile(‘./data/word.txt’, ‘utf8’, function(err, data){
nodejieba.load({
userDict: ‘./user.utf8’,
});
const result = nodejieba.extract(data, 120);
const tagList = [‘原型’, ‘闭包’, ‘HTTP’, ‘CORP’, ‘TCP’, ‘HTTPS’,‘跨域’,‘XSS’,‘安全’,‘事件循环’,‘VUE’,‘CSS’,‘算法’,‘线程’,‘NODE’,‘’,‘缓存’,‘内存’,‘作用域链’,‘垂直居中’,‘布局’,‘状态码’,‘原型链’,‘ES6’,‘箭头函数’,“PROMISE”,‘垃圾回收’,‘优化’];
let textNo = JSON.stringify(result.filter(item => tagList.indexOf(item.word.toUpperCase()) >= 0));
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
判断
回到题目,如果你真想检验一个人的水平。第一步先考察一下基本的编程基础,问几个基本的编程问题,可以和前端相关也可以无关。比如垃圾收集大致是怎么做的,setTimeout 大致做了什么(说会在另一个线程里执行回调的直接毙掉)。
第二步考察一下知识面,问问http、tcp的基本知识,dns是怎么工作的,或者常用框架的实现原理,看看候选人是不是除了自己的一亩三分地什么都不关心。
第三步考察hold业务逻辑的能力,从一个简单的注册页,或者查询页开始,先让说下代码的基本架构,然后需求、性能、可靠性、安全层层加码,看看能不能很快的反馈出解决方案。能对答如流的要么做过,要么对他来说这种复杂度的东西是小case。
前三步都没问题,基本上说明候选人已经还行了,但是行到什么程度,不知道。如果想找比较厉害的,就增加个第四步,亮点项目考察。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了,我整理一套前端面试题分享给大家,希望对即将去面试的小伙伴们有帮助!
166371)**
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了,我整理一套前端面试题分享给大家,希望对即将去面试的小伙伴们有帮助!
[外链图片转存中…(img-BEge1WAc-1710688590123)]
[外链图片转存中…(img-OjghM88s-1710688590123)]