nodejs爬蟲第一篇---> request、cheerio實現小爬蟲


目標

  • 抓取貓眼正在熱映的電影頁面的數據,使用的第三方模塊 request、cheerio。

說明

  • 有時候我們需要做一些項目或者demo,我們需要一些數據,我們就可以利用爬蟲,爬取一些我們想要的數據。個人感覺挺有趣。需要安裝 node

request

  • request是一個第三方的模塊,封裝了 http 模塊,使我們發送 get、post等 請求更簡潔。有幾個重要的參數:
    • url:請求的地址
    • method:請求的方式
    • function:回調函數,該函數也有三個參數:1、err 錯誤對象,2、response 響應對象,3、body 響應數據
  • 安裝
npm install request --save
//引入模塊
const request = require('request')
//小試牛刀:向百度首頁發送了一個get請求
const url = 'https://www.baidu.com/'
request(url, function (err, response, body) {
    console.log(body)
})

cheerio

  • 會用 jQuery,那么使用 cheerio就不會難了,cheerio 包括了 jQuery 核心的子集。cheerio 從jQuery庫中去除了所有 DOM不一致性和瀏覽器尷尬的部分,幾乎能夠解析任何的 HTML 和 XML document,通過load方法傳遞 HTML document或者標簽字符串的形式來加載返回 相應的對象,該對象可以對 HTML document或者標簽進行操作。
  • 安裝
npm install request --save
const request = require('request')
const cheerio = require('cheerio')

//傳遞 HTML document
const url = 'https://www.baidu.com/'
request(url, function (err, response, body) {
    //此時body即為 HTML documen
    const $ = cheerio.load(body)
})
//傳遞標簽字符串
const $ = cheerio.load('<div class="text">...</div>')

抓取數據

  • 獲取HTML document對象
const request = require('request')
const cheerio = require('cheerio')

function getMovies(url) {
    return new Promise((resolve, reject) => {
        request(url, function (err, response, body) {
            //獲取HTML document對象  即body參數
            const $ = cheerio.load(body)
        })
    })
}
  • 貓眼熱映電影頁面圖片
  • HTML結構分析
    • 通過分析 HTML的結構,可知道這些值可以通過下面的代碼獲取到
var item = $('.movie-list dd')
item.map(function (i, val) {
var movieObj = {}
//電影鏈接
movieObj.movieLink = $(val).find('.movie-poster').children('a').attr('href')
//電影圖片
movieObj.moviePoster = $(val).find('.movie-item').children('img').last().attr('data-src')
//電影 名字
movieObj.movieTitle = $(val).find('.movie-item-title').children('a').text()
//電影評分
movieObj.movieDetail = $(val).find('.channel-detail-orange').text()
})

完整代碼


const request = require('request')
const cheerio = require('cheerio')

function getMovies(url) {
    var movieArr = []

    return new Promise((resolve, reject) => {
        request(url, function (err, response, body) {

            var item = $('.movie-list dd')
            item.map(function (i, val) {
                var movieObj = {}

                //電影鏈接
                movieObj.movieLink = $(val).find('.movie-poster').children('a').attr('href')
                //電影圖片
                movieObj.moviePoster = $(val).find('.movie-item').children('img').last().attr('data-src')
                //電影 名字
                movieObj.movieTitle = $(val).find('.movie-item-title').children('a').text()
                //電影評分
                movieObj.movieDetail = $(val).find('.channel-detail-orange').text()

                //把抓取到的內容 放到數組里面去
                movieArr.push(movieObj)
            })

            //說明 數據獲取完畢
            if (movieArr.length >0){
                resolve(movieArr)
            }
        })
    })
}

//獲取正在熱映電影數據
getMovies('https://maoyan.com/films?showType=1')
    .then((data) => {
        console.log(data)
    })

抓取結果(部分)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM