node.js抓取中关村网上电瓶车信息
背景
学习nodejs有一段时间了,网上有很多关于nodejs爬虫的文章,于是开始练习写一段。最近打算买个电瓶车上班,不知道买哪个好。网上众说纷纭,所以我想,不妨写一个带node.js的小爬虫,在中关村在线抓取关于电瓶车的信息。
简介
这个演示使用node.js作为爬虫。为了方便起见,es6语法在某些地方使用。如果您不理解,请咨询
步骤
第一步是介绍所需的库
var cherio=require(' cherio ');var fetch=require(' node-fetch ');//cheerio是浏览器端的jQuery,用来解析HTML。//fetch用于发送请求。第二步,设置初始爬行入口(我在杭州,所以选择了杭州)
//初始URL varurl=' http://detail.zol.com.cn/conventionaltravel/Hangzhou/# list _ merchant _ loc '//因为每个a标签下都有一个相对路径,所以需要一个根地址进行拼接。下面的varurl root=' http://detail . zol.com . cn '//存储所有的URL,之所以使用set是为了防止相同的URL重复抓取。var URL=new Set()//存储所有数据。var数据=[]至此,我们的准备工作结束。接下来,表演开始。
分析网页,思考爬行的方式
每行4个型号,每页48个型号,共16页
思考:
每次你在当前页面得到48个链接,点击它们,你就会得到电瓶车的名称和价格(其他信息也是通过同样的方式获得的,你自己改就可以了)。第一页完成后,翻到下一页,继续往上爬,直到最后一页结束。首先,我们定义一个函数如下
//这是从每个页面获取48个链接,开始发送请求函数ad(arg){//参数arg被忽略//本地化链接进行抓取。让url2=arg | | url//请求此网页首页,获取数据后,复制到app var app=wait fetch(URL 2)。然后(RES=RES . text())//然后假装解析var $=chef . load(app)//并获取A标记var ele=$('#J_PicMode a.pic')//存储抓取的URL以防止重复抓取var old _ URL=[]var URL app=[]//获取所有A标记地址后,将它们存储在数组中。for(设I=0;长度;I) {old _ URLs。推送(获取(URL根$ (ele [I]))。attr ('href ')。然后(RES=RES . text()))}//使用throw URL来承诺处理URL app=await promise。all(old _ URL)/。i urlapp.lengthI) {let $2=大厨。加载(urlapp [I],{ decodeentities 3360 false })数据。push ({name: $2 ')。产品型号_ _名称')。text(),price: $2('。价格。//然后开始爬下一页var next URL=$('。下一个')。attr(' href ')//判断当前页面是否为最后一页if(next URL){ let next=wait fetch(URL根next URL)。然后(RES=RES . text())//获取下一页的标签并获取地址
var cherio=require(' cherio ');var fetch=require(' node-fetch ');var URL=' http://detail . zol.com.cn/convenient travel/hung/# list _ merchant _ loc ' var URL root=' http://detail . zol.com . cn '/var URL=' http://localhost 33603222/app 1 ' var URL=new Set()var data=[]async函数ad(arg){ let URL 2=arg | | URL;var app=wait fetch(URL 2)。然后(RES=RES . text())var $=cheerio . load(app)var ele=$(' # J _ PicMode a . pic ')var old _ URL=[]var URL app=[]for(让I=0;长度;I){ old _ URLs . push(fetch(URL root $(ele[I])。attr('href ')。然后(RES=RES . text()))} URL app=await Promise . all(old _ URL)for(让I=0;i urlapp.lengthI){ let $ 2=cheerio . load(URL app[I],{ decodeentitis : false })data . push({ name : $ 2 ' .产品型号_ _名称')。文本(),价格:美元2 '。价格型’)。text ()})} var next URL=$('。下一个')。如果(下一个网址){让下一个=等待提取(网址根下一个网址)。然后(res=res.text())
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。
版权声明:node.js抓取中关村网上电瓶车信息是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。