# 使用 superagent 与 cheerio 完成简单爬虫

# 爬一下CNode专业中文社区

const express = require('express')
const superagent = require('superagent')
const cheerio = require('cheerio')

const app = express()
const PORT = process.env.PORT || 8000
const URL = 'https://cnodejs.org'
/**
 * 当在浏览器中访问 http://localhost:8000/ 时,输出 CNode(https://cnodejs.org/ ) 社区首页的所有帖子标题和链接,以 json 的形式。
 */
app.get('/', (req, res, next) => {
  // 使用 superagent 获取 url
  superagent.get(URL, (err, sres) => {
    if(err) {
      return next(err)
    }
    const $ = cheerio.load(sres.text)
    const items = []
    const $target = $('#topic_list .topic_title')
    let itemsHtml = ''  

    $target.each((i, item) => {
      let $this = $(item)
      items.push({
        title: $this.attr('title'),
        url: URL + $this.attr('href')
      })
    })

    console.log('items--->', items)  // 以 JSON 格式打印

    if(items) {
      $(items).each((i, item) => {
        itemsHtml += `<li><a href="${item.url}" title="${item.title}">${item.title}</a></li>`
      })
        itemsHtml = `<ol id="listItem">${itemsHtml}</ol>`
    } else {
      itemsHtml = `<p>暂时还获取不到数据...</p>`
    }

    res.send(itemsHtml)
  })
  
})

app.listen(PORT, (req, res) => {
  console.log('App is listening at port ' + PORT)
})
Last Updated: 5/22/2020, 5:01:49 PM