入门级的 node 爬虫
github 地址:https://github.com/lll618xxx/…
思否社区文章太多?哪个是我想要的?对比点赞数 or 对比标题
不用害怕,自己动手用 node 来实现爬虫,麻麻再也不用担心我学习选择困难症啦!
核心代码
const superagent = require('superagent')
const cheerio = require('cheerio')
const xlsx = require('node-xlsx')
const fs = require('fs')
const options = require('./options')
superagent.get(options.url)
.then(res => {
const bufferdata = [{
name: 'sheet1',
data: [options.attr.map((item, index, arr) => {return arr[index][2]
})]
}]
const $ = cheerio.load(res.text);
$(options.ele).each((index, item) => {let arr = []
options.attr.forEach((v, i, a) => {arr.push(a[i][1] ? $(item).find(a[i][0]).attr(a[i][1]) : $(item).find(a[i][0]).text())
})
bufferdata[0].data.push(arr)
})
fs.writeFile(options.excelPath, xlsx.build(bufferdata), (err) =>{if (err) throw err;
console.log('写入 Excel 成功');
})
})
.catch(err => {console.log(err)
});
核心的代码仅仅只有 36 行哦!
配置代码
const path = require('path')
// 定义爬虫的页面
const url = 'https://segmentfault.com/hottest/monthly'
// 定义 excel 存放的路径
const excelPath = path.join(__dirname, 'result.xlsx')
// 定义元素范围
const ele = 'div.wrapper div.news-list div.news__item-info'
// 定义数据属性 ['具体元素','属性', '别名']
const attr = [['a', 'href', '链接'],
['span.votes-num', '',' 点赞数 '],
['h4.news__item-title', '',' 标题名字 '],
['span.author a', '',' 作者名字 '],
]
安装依赖
npm i
运行项目
cd node-reptile-simple && node index.js
配置项(options.js)
url 定义爬虫的页面
excelPath 定义 excel 存放的路径
ele 定义元素范围
attr 定义数据属性 ['具体元素','属性', '别名']
截图
可以去 github 查看更完整的内容
爬的不仅仅是思否,只有你想不到的,没有我做不到的!