github地址:https://github.com/lll618xxx/...javascript
思否社區文章太多?哪一個是我想要的?對比點贊數or對比標題
不用懼怕,本身動手用node來實現爬蟲,麻麻不再用擔憂我學習選擇困難症啦!java
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行哦!node
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
url 定義爬蟲的頁面 excelPath 定義excel存放的路徑 ele 定義元素範圍 attr 定義數據屬性 ['具體元素', '屬性', '別名']
能夠去github查看更完整的內容
爬的不單單是思否,只有你想不到的,沒有我作不到的!git