3

入门级的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查看更完整的内容
爬的不仅仅是思否,只有你想不到的,没有我做不到的!


magic_xiang
435 声望14 粉丝