1. 程式人生 > >用mpvue與node實現一個簡單的爬蟲

用mpvue與node實現一個簡單的爬蟲

序言

爬蟲技術,在當今的互聯網裡面是佔據著非常重要的位置的。那什麼是爬蟲呢?亦即是按照一種特定的指令碼,請求指定的網頁並獲取資料的一段程式。而我們今天這個分享呢,就是利用node的幾個模組,配合mpvue實現小程式的爬蟲功能。

需求分析

1. 爬蟲目標

利用掃碼的功能從獲取圖書的豆瓣資訊,同時將其資訊顯示出來。

利用豆瓣api將下面網站的書籍資訊進行同步。

2. 任務風險與預估工作量

爬取豆瓣資訊是否有網路阻塞?如何解決異常處理?功能難點在哪處?完成的工作量是多少?

這是專案研發過程中特別重要的一個環節,因為是影響程式設計師是否能準時交付工作的原因,相信很多老鐵包括Eknow在工作中經常遇到工作延期的情況,任何不可預估的風險都應該在前期評估完,這樣在專案進行時才能夠保證任務的完成係數。當然要完成這一環節,可以考慮下Excel、xmind來進行可觀評估。

3. 扮演角色

鎖定功能的亮點,在專案中佔據的位置

完成專案中某個功能,理想狀態來講,是需要對這個功能的熟悉程度瞭然於胸的,甚至需要比任何人都要懂。這樣的狀態,離不開需求討論,功能設計以及編碼經驗的。

流程設計

1. 技術實現

1.既然需要用node來實現爬蟲,我們可以選擇http模組以及cherrio模組;2. 掃碼時獲取的book_id需要傳到後臺進行校驗;3. 帶上引數book_id請求豆瓣api獲取相應的資料;4. 儲存在mysql資料庫裡面;5. 篩選需要的圖書資訊進行顯示。

2. 分析url

爬取資料的前提便是得到api的url資訊,同時進行介面分析,通過獲取資料的返回值進行欄位分析,得到所需要欄位的資訊。

編碼

1. 首先,編寫掃碼、新增圖書的方法

需要呼叫api獲取掃碼圖書的ID資訊,同時在addBook的方法裡將ID值作為引數傳給後臺,進行新增成功的提示處理。

export default { 

  methods: { 
      scanBook(){
        wx.scanCode({
          success (res) {
            this.addBook(res.result);
          }
        })
      },
       async addBook(data){
        const res=await this.request('/weapp/addBook','post',data);  
        if (res.code===0&&res.data.title) {
          wx.showToast({
            title: `${res.data.title}新增成功`,
            icon: 'success',
            duration: 2000
          })
        }
      }, 
      request(url,methods,data){
        return new Promise((resolve,reject)=>{
          wx.request({
            url: url, 
            methods,
            data: data, 
            success (res) {
              if (res.data.code === 0) {
                resolve(res.data);
              }else{
                reject(res.data);
              }
            } 
          })
        })
      },
  }
}

2. 後臺處理得到的ID值,同時進行豆瓣資訊的爬取

找到本地server的檔案目錄,在routes/index.js裡面新增一個方法。

 router.post('/addbook',controllers.addbook);

接著在controllers目錄下新建一個檔案為addbook.js,作為控制器,使用node的模組https去獲取豆瓣資訊。

module.exports = async (ctx)=>{
  const {isbn,openid} = ctx.request.body;
  if(isbn &&openid){ 
    let url = 'https://api.douban.com/v2/book/isbn/'+isbn
    const bookinfo = await getJSON(url)
    const rate = bookinfo.rating.average
    const { title, image, alt, publisher, summary ,price} = bookinfo
    } 
  }

function getJSON(url){
  return new Promise((reslove,reject)=>{
    https.get(url,res=>{
      let urlData = ''
      res.on('data', data=>{
        urlData += data
      })
      res.on('end', data=>{
        const bookinfo = JSON.parse(urlData)
        if(bookinfo.title){
          reslove(bookinfo)
        }
        reject(bookinfo)
      })
    })
  })
}

測試結果

結語

至此,一個簡單的爬蟲功能便已經實現了,其中也歸納了爬蟲的基本處理方式,也算是對資料探勘這一塊有了基礎的認知。大前端也有往資料領域發展的分支,就看各位老鐵的意向如何咯。
老鐵們也可以在後臺回覆【爬蟲】獲取原始碼,希望我們可以一起進一步地進行交流。

推薦文章

                                     才華與信仰