当前位置: 首页 > 后端技术 > Node.js

nodejs爬虫-汽车之家全车型数据

时间:2023-04-03 20:22:05 Node.js

应用介绍项目Github地址:https://github.com/iNuanfeng/...nodejs爬虫,爬取汽车之家全车型数据http://www.autohome.com.cn/car/包括品牌、车系、年份、车型四个层次。使用的节点模块:superagent、request、iconv;(网络请求模块,iconv用于gbk转码)cheerio;(与jQuery相同的API,处理请求的html,消除正则匹配)eventproxy,async;(控制并发Request,async控制更细)async控制并发数为10(避免IP阻塞和网络错误)模拟sleep使间隔100ms(没有间隔会偶尔出现dns错误)去掉express模块,是时候直接给控制台打开爬虫了(数据量大,打开网页启动爬虫可能会超时重新发起访问)最后用到的模块有:request、iconv、cheerio、async和最后写入数据库mysql或者mongoDB,写入data.json:项目描述app。js是爬虫的主程序,一步步抓取数据。抓取品牌和车系,抓取年份,抓取车型存入本地json文件,需要时写入数据库(还没写)详情对照http://www.autohome.com.cn/3128有2016款和2017款同时在售有2016款和2016款在售,还有2016款已经停产。当抓取失败时,重新抓取页面。项目代码Github地址:https://github.com/iNuanfeng/...app.js:varexpress=require('express'),app=express(),request=require('request'),iconv=require('iconv-lite'),cheerio=require('cheerio'),async=require("async"),//控制并发数防止IP被封fs=require('fs');varfetchData=[];//存储爬取的数据/***睡眠模拟函数*@param{Number}numberMillis毫秒*/functionsleep(numberMillis){varnow=newDate();varexitTime=now.getTime()+numberMillis;while(true){now=newDate();如果(now.getTime()>exitTime)返回;}}/***抓取品牌&车系*/functionfetchBrand(req,res){varpageUrls=[];//存储抓取URLvarcount=0;//总数varcountSuccess=0;//成功数varchars=['A','B','C','D','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z'];for(varcharofchars){count++;U页rls.push('http://www.autohome.com.cn/grade/carhtml/'+char+'.html');}varcurCount=0;varreptileMove=function(url,callback){varstartTime=Date.now();//记录本次爬取请求的开始时间({url:url,encoding:null//keycode},function(err,res,body){if(err||res.statusCode!=200){console.error(err);console.log('抓取页面失败,重新抓取页面..')reptileMove(series,callback);returnfalse;}varhtml=iconv.decode(body,'gb2312')var$=cheerio.load(html);varcurBrands=$('dl');for(vari=0;i

猜你喜欢