入门级的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查看更完整的内容
爬的不仅仅是思否,只有你想不到的,没有我做不到的!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。