手记

用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)
      })
    })
  })
}

测试结果

结语

至此,一个简单的爬虫功能便已经实现了,其中也归纳了爬虫的基本处理方式,也算是对数据挖掘这一块有了基础的认知。大前端也有往数据领域发展的分支,就看各位老铁的意向如何咯。
老铁们也可以在后台回复【爬虫】获取源码,希望我们可以一起进一步地进行交流。

推荐文章

想高效开发小程序,mpvue了解下(一)
想高效开发小程序,mpvue了解下(二)
用mpvue实现一个简单的demo
初探Mpvue的组件、样式机制


 



1人推荐
随时随地看视频
慕课网APP