目標
- 抓取貓眼正在熱映的電影頁面的數據,使用的第三方模塊 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>')
抓取數據
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)
})
抓取結果(部分)
