nodeJs 写个爬虫小玩意
内容
起一个服务,爬某个网站的数据(我这里爬了个夕阳红游戏交易网站的数据),页面看到我要爬的内容
代码
1 //引入内置的http包 2 var http = require('http'); 3 const request = require("request"); 4 const cheerio = require("cheerio"); 5 //创建服务 6 var server = http.createServer(function(req, res) { 7 // res.end('111'); //注意这里 括号里不管是什么都要加上‘引号’ 8 getInfo(res) 9 }); 10 11 //端口监听 12 server.listen(8080); 13 14 /** 15 * 获取每一条的信息 16 */ 17 const getInfo = (res) => { 18 res.writeHead(200, {'Content-type': 'text/html;charset=utf-8'}) 19 request({ 20 url: 'http://tl.cyg.changyou.com/goods/selling?world_id=0&have_chosen=&page_num=2#goodsTag', 21 method: 'get', 22 headers: { 23 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36', 24 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', 25 // 这里巨坑!这里开启了gzip的话http返回来的是Buffer。 26 // 'Accept-Encoding': 'gzip, deflate', 27 'Accept-Language': 'zh-CN,zh;q=0.9', 28 'Cache-Control': 'no-cache', 29 }, 30 // 想请求回来的html不是乱码的话必须开启encoding为null 31 encoding: null 32 }, (e, r, body) => { 33 // 这样就可以直接获取请求回来html了 34 // console.log('打印HTML', body.toString()); // <html>xxxx</html> 35 const $ = cheerio.load(body); 36 const $li = $('.pg-goods-list .role-item'); 37 const list = [] 38 $li.map((i, index) => { 39 let obj = {}; 40 obj.link = $(index).children('dl').children('dt').children('a').attr('href'); 41 list.push(obj); 42 res.write(obj.link) 43 res.write('<br/>') 44 }); 45 res.write('<br/>') 46 res.end('爬完了') //注意这里 括号里不管是什么都要加上‘引号’ 47 }); 48 }
输出
思路
本地起一个服务,然后打开页面,相当于调了一次请求,开始调取需要爬数据的网站的html,然后用cheerio相关的获取页面元素,类似jquery。然后把信息在页面上打印出来