request cheerio 抓取页面并获取所需数据
来源:互联网 发布:罗氏lc480软件安装 编辑:程序博客网 时间:2024/06/07 08:00
有了node后,前端抓取网页数据就不成问题了
一般抓取都是获取页面中指定的数据。
分两种,一种同标签的html 一种是标签的属性值。
我自己写的比较lou ,只是从列表获取详情url,然后读取详情页面。
用cheerio获取有用数据,用fs写到文件内。保存指定的图片。
当然它对于页面用ajax加载的数据是无效的。
request 只能拿到页面的源码。至于获取ajax后的页面代码就需要用phantomjs 了。
现在用的对于大多已经够用了,速度比phantomjs快多了。
需要注意的几点:
1、创建目录
if(!fs.existsSync('pages')){fs.mkdirSync('pages')}这是判断然后创建文件夹
但对于'/a/b/c'这种的就需要递归了。
用mkdir创建是会报错的,淌有a b 文件夹c是创建失败的。
//创建文件夹目录//mkdir('a/b/c/d')function mkdir(s){ if(!fs.existsSync(s)){ var a=''; s.split('/').forEach(function(v){ //console.log(v); create(v); }) function create(p){ a+=p; if(!fs.existsSync(a)){ fs.mkdirSync(a); } a+='/' } }}
2、cheerio用法
var $=cheerio.load(body)
之后用$来查找标签
$('#gallProd img');
as.eq(i).attr('src').replace('prodTmb','prodPage');
$('.infoProdDet .originalPrice').text()
3、写入文件
fs.appendFile('/pages/info.html',txt,fn)
4、下载图片
下载图片用http,对于https开头的需要写成http
图片保存用fs.writeFile('pages/img/1.jpg',data,'binary',fn)
ar fs=require('fs');var request=require('request')var cheerio=require('cheerio');var path=require('path');var http=require('http')if(!fs.existsSync('pages')){fs.mkdirSync('pages')}var site='https://www.xxxx.com'function getlist(name,url){request(url,function(error,res,body){if (!error && res.statusCode == 200) { //console.log(body); //返回请求页面的HTML gethtml(name,body); }})}function gethtml(name,data){console.log('-----------------------------------------------\n')var $=cheerio.load(data);var urls=[] var a=$('.prodList a[itemprop="url"]'); for(var i=0;i<a.length;i++){ var s=a.eq(i).attr('href') console.log(s) getshow(name,s) }}function getshow(filename,url){if(!fs.existsSync('pages/'+filename)){fs.mkdirSync('pages/'+filename);}request(site+url,function(error,res,body){if (!error && res.statusCode == 200) { ditalshow(site+url,filename,body); }})}function ditalshow(url,filename,body){var $=cheerio.load(body)var as=$('#gallProd img');var txt=url+'\n';//图片地址for(var i=0;i<as.length;i++){var a=as.eq(i).attr('src').replace('prodTmb','prodPage');a='http:'+a;//下载图片//downimg(filename,a);//console.log(a);txt+=a+'\n';}var c=$('.infoProdDet .originalPrice').text() +' '+ $('.infoProdDet .salePrice').text()txt+=c+'\n';var size=$('li.sizeBox label')for(var i=0;i<size.length;i++){var t=size.eq(i).attr('for').split('_')[2].slice(1);txt+=t+' ';}txt+='\n';txt+=$('.infoBox').html()+'\n\n';appendFile(filename+'/info.html',txt);}var url='http/list'getlist('Jeans',url)function appendFile(file,txt){fs.appendFile('pages/'+file,txt,function(err){if(err){console.log(file,txt,err);}})}//downimg('Jeans','img url')function downimg(file,url){var name=url.slice(url.lastIndexOf('/')+1);http.get(url, function(res) { var data = ''; res.setEncoding('binary'); res.on('data', function(chunk) { data += chunk; }); res.on('end', function() { fs.writeFile('pages/'+file+'/'+name, data, 'binary', function(err) { if (err) { return console.log(err); } }); }); }).on('error', function(err) { console.log(err); });}
0 0
- request cheerio 抓取页面并获取所需数据
- nodejs + request + cheerio 抓取页面指定的信息
- 抓取页面模块 cheerio
- 使用node.js cheerio抓取网页数据
- 使用node.js cheerio抓取网页数据
- 使用node.js cheerio抓取网页数据
- Node.js使用cheerio抓取网页数据DEMO
- 页面获取数据(request、session、application)
- NodeJS中,Express获取request所传递的数据方式
- httpClient4.3 模拟Post提交,模拟Post上传文件并解决服务端使用spingMVC时upload.parseRequest(request)解析不到File,Pos简单抓取页面数据
- 抓取并处理WEB页面数据(CURL/DOM)
- Node.js学习之网络爬虫(使用cheerio抓取网页数据)
- php 抓取页面数据
- html页面数据抓取
- JS获取页面数据并打印
- FreeMarker 获取页面request
- Request向客户机输出表单,并获取数据
- soapUI获取数据表数据并向下传递给request
- mui 综合
- .net框架
- 利用oracle隐式将TIMESTAMP转为Date
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
- 关于gcd
- request cheerio 抓取页面并获取所需数据
- 3.6 mxc_v4l_ioctl函数分析
- SQLServer创建表,插入数据,查询,创建触发器,存储过程
- 用Jersey开发RESTful服务
- BZOJ1042【HAOI2008】硬币购物(DP+容斥原理)
- googlePlay 内购测试
- 物语--解题报告
- 详解 Spring 3.0 基于 Annotation 的依赖注入实现
- 改良后的 清除日志文件脚本