记录使用nodejs爬取某网站数据
其实就是获取一个模板网站的模板,因为偶尔会有需要模板使用,但是这个网站禁用f12,虽然我view-source就可以拿到真实链接但是这样也显得麻烦,所以干脆把它数据搞下来处理后搞一个自己用的模板网站
首先引入需要的东西
const axios = require('axios');
const cheerio = require('cheerio');
const mysql = require('mysql');
const sqlconn = mysql.createConnection({ //配置数据库连接
host : 'localhost',
user : 'root',
password : '不给你看',
database : '不给你看'
});
sqlconn.connect(); //链接数据库
axios和cheerio是要npm安装再引入
axios用来请求数据,
cheerio能够将html字符建立DOM树也即是一个html结构,然后就可以对解析出来的内容像在浏览器一样对DOM操作.
mysql就是插入数据不用多说了
主要的代码
有关使用nodejs连接数据库可以看nodejs连接数据库
// Tue Jul 20 21:31:08 CST 2021 - getnums:4000,stari:2000
let getnums = 4000; //获取条数-end
for(let stari = 2000;stari <= getnums; stari++){
gettmdresource("不让你看"+stari+".html",stari);
}
//获取数据
function gettmdresource(gurl,its){
axios.post(gurl,{timeout: 1000*60*1}).then(response => {
if(response.status==200){
console.log("数据获取成功"+its);
let sqltext,parmsarr;
$ = cheerio.load(response.data); //文档获取
sqltext = "INSERT INTO psource(lang,title,description,url) VALUES(?,?,?,?)";
parmsarr = [$('head>title').text().split(" ")[0],$('head>title').text().split(" ")[1],$("meta[name='description']").attr('content'),$('#iframe').attr('src')];
console.log(parmsarr.join("->")); //debug
sqlconn.query(sqltext, parmsarr, function (error, results) {
if(error){
console.log('[INSERT ERROR] - ',error.message);
return;
}
});
}
}).catch(error => {
console.log("获取不到"); //debug
});
}
因为该网站的模板的url都是一样的结构只是后面几个数字不同,所以for循环遍历就可以搞下来;
我在爬取之前分析了一下模板的预览界面的html结构,最后总结就是我只需要他的title,description,模板真正的url,就ok了,通过jquery获取他们,然后使用mysql的insert将数据插入数据库,大功告成!