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