node
实现简单的爬虫
一、基本环境
- 1、
window7
- 2、
node8.9.3
二、环境搭建
-
1、新建一个文件并在文件中的黑窗口中执行
npm init --yes 复制代码
-
2、安装依赖包
yarn add cheerio // Node.js 版的jQuery yarn add iconv-lite // 处理网站编码的问题 yarn add mysql // 非必须的,只是存入mysql数据库 复制代码
三、实现简单的抓取网页上的数据
-
1、核心代码
var cheerio = require('cheerio'); var http = require('http'); var iconv = require('iconv-lite'); var fs = require('fs'); // 设置需要抓取的网页 var url = 'http://www.jobbole.com/'; http.get(url, function(sres) { var chunks = []; sres.on('data', function(chunk) { chunks.push(chunk); }); sres.on('end', function() { // 定义一个临时存储数据的字段 var result = { news: [], web: [] }; // 设置编码 var html = iconv.decode(Buffer.concat(chunks), 'utf-8'); // 使用类似jq的选择器 var $ = cheerio.load(html, {decodeEntities: false}); $('#widgets-homepage-fullwidth > div:nth-child(3) .grid-4').each((idx, element) => { var $element = $(element); $element.find('.floated-thumb').each(function(index, ele) { var url = $(ele).find('.post-thumb > a > img').attr('src'); var title = $(ele).find('.post-meta .meta-title').text(); result.news.push({ imgUrl: url, title: title }); }); }); // 获取web数据 $('#widgets-homepage-fullwidth > div:nth-child(7) > .floated-thumb').each((index, ele) => { var imgUrl = $(ele).find('.post-thumb > a > img').attr('src'); var text = $(ele).find('.post-meta > p > a.meta-title').text(); result.web.push({ imgUrl: imgUrl, text: text }); }); // 把数据写入到本地 fs.writeFile('./11.json', JSON.stringify(result, null, 2), { 'flag': 'w+' }, (error) => { if (error) { console.error('错误'); } console.info('成功'); }); }); }); 复制代码
-
2、上面使用类似
jq
的选择器中选择器可以使用下面方式复制
打开浏览器控制台->elements->右键->copy->copy selector
- 3、参考代码(
main1.js
)