最近在做物流项目成本分析,需要爬取柴油价格数据,使用到了cheerio,cheerio实现了jQuery核心的一个子集。以下为爬取代码。
var http = require("http");
function gethtml(url,callback){
http.get(url,function(res){
var data = "";
res.on('data',function(chunk){
data += chunk;
});
res.on('end',function(){
callback(data);
});
}).on("error",function(){
callback(null);
})
}
exports.gethtml = gethtml;
const cheerio = require('cheerio');
const server = require('./getHtml');
var url = 'http://ny.gold600.com/';
server.gethtml(url,function(data){
if(data){
var $ = cheerio.load(data);
var data = [];
var list = $('.oilTable tbody tr:nth-child(odd)');
list.each(function(index,element){
let city = $(element).find('a').text().replace(/\s/g,'');
let price = $($(element).find('td')[4]).text().replace(/\s/g,'');
let time = $($(element).find('td')[5]).text().replace(/\s/g,'');
data.push({city,price,time})
})
var str = '';
data.forEach(function(item,index){
if(index == 0){
str += 'VALUES("'+item.city+'",'+item.price+',"'+item.time+'")';
}else{
str += ',("'+item.city+'",'+item.price+',"'+item.time+'")';
}
})
console.log(str)
var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'******',
database:'price'
});
console.log(str)
connection.connect();
connection.query('DELETE FROM priceList');
connection.query('ALTER TABLE priceList AUTO_INCREMENT=1');
connection.query('INSERT priceList(city,price,time) '+str,function(error,results,fields){
if(error) throw error;
console.log('The solution is:',results);
let a = results[1];
console.log(a)
})
connection.end();
console.log(value);
}else{
console.log("error");
}
})
需要注意的是使用$(selector).find(selector)查找到的元素需要使用再次使用$()进行包裹才能使用cheerio提供方法,如:text()。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?