nodeJS做一個簡單的爬蟲
nodeJS(準確的說是express+request+cheerio)做一個簡單的爬蟲,爬取豆瓣電影的電影圖片,電影描述。
預設認為已安裝node環境。
建立資料夾projectName
在資料夾下命令列執行npm init
,一路回車,或者自定義資訊初始化專案;成功後執行npm install express request cheerio -S
安裝依賴;成功後在目錄下建立index.js
,建立資料夾data
(用來存放爬取下來的電影描述)和image
(用來存放電影圖片);接下來就開始寫爬取邏輯了,程式碼如下:
var http = require('https'); //使用https模組
var fs = require('fs');//檔案讀寫
var cheerio = require('cheerio');//jquery寫法獲取所得頁面dom元素
var request = require('request');//傳送request請求
var i = 0;
var url = "https://movie.douban.com/subject/1889243/?from=subject-page";
//初始url
function fetchPage(x) { //封裝一層函式,方便遞迴呼叫
startRequest(x);
}
function startRequest(x) {
//採用http模組向伺服器發起一次get請求
http.get(x, function(res) { //get到x網址,成功執行回撥函式
var html = ''; //用來儲存請求網頁的整個html內容
res.setEncoding('utf-8'); //防止中文亂碼
//監聽data事件,每次取一塊資料
res.on('data', function(chunk) {
html += chunk;
});
//監聽end事件,如果整個網頁內容的html都獲取完畢,就執行回撥函式
res.on('end', function() {
var $ = cheerio.load(html); //採用cheerio模組解析html
var news_item = {
//獲取電影的標題
title: $('.related-info h2 i').text().trim(),
//i是用來判斷獲取頁數
i: i = i + 1,
};
console.log(news_item); //列印新聞資訊
var news_title = $('.related-info h2 i').text().trim();
savedContent($, news_title); //儲存每篇文章的內容及文章標題
savedImg($, news_title); //儲存每篇文章的圖片及圖片標題
//下一篇電影的url
nextLink = $(".recommendations-bd dl:last-child dd a").attr('href');
if(i <= 10) { //爬取10頁
fetchPage(nextLink);
}
});
}).on('error', function(err) { //http模組的on data,on end ,on error事件
console.log(err);
});
}
//儲存標題函式
function savedContent($, news_title) {
$('#link-report span').each(function(index, item) {
var x = $(this).text();
x = x + '\n';
//將新聞文字內容一段一段新增到/data資料夾下,並用新聞的標題來命名檔案
fs.appendFile('./data/' + news_title + '.txt', x, 'utf-8', function(err) {
if(err) {
console.log(err);
}
});
})
}
//該函式的作用:在本地儲存所爬取到的圖片資源
function savedImg($, news_title) {
$('#mainpic img').each(function(index, item) {
var img_title = $('#content h1 span').text().trim(); //獲取圖片的標題
if(img_title.length > 35 || img_title == "") { //圖片標題太長
img_title = "Null";
}
var img_filename = img_title + '.jpg';
var img_src = $(this).attr('src'); //獲取圖片的url
//採用request模組,向伺服器發起一次請求,獲取圖片資源
request.head(img_src, function(err, res, body) {
if(err) {
console.log(err);
}
});
request(img_src).pipe(fs.createWriteStream('./image/' + news_title + '---' + img_filename));
//通過流的方式,把圖片寫到本地/image目錄下,並用標題和圖片的標題作為圖片的名稱。
})
}
fetchPage(url); //主程式開始執行
專案根目錄下DOC命令node index.js
執行程式,完成後可在data
和image
下檢視爬取下來的內容啦。
這個只是簡單的爬取電影資訊的程式,需要其他功能,需要在邏輯中進行改動。(程式碼是我抄的,如作者不同意,請聯絡我,我修改!)
相關文章
- 使用nodeJS寫一個簡單的小爬蟲NodeJS爬蟲
- 初探python之做一個簡單小爬蟲Python爬蟲
- 一個簡單的爬蟲 頭部構造爬蟲
- 教你如何編寫第一個簡單的爬蟲爬蟲
- java實現一個簡單的爬蟲小程式Java爬蟲
- nodejs 爬蟲NodeJS爬蟲
- 簡單的爬蟲程式爬蟲
- 一個老同學的故事引發的nodejs 爬蟲NodeJS爬蟲
- python爬蟲:爬蟲的簡單介紹及requests模組的簡單使用Python爬蟲
- python簡單爬蟲(二)Python爬蟲
- 一天時間入門python爬蟲,直接寫一個爬蟲案例,分享出來,很簡單Python爬蟲
- python最簡單的爬蟲 , 一看就會Python爬蟲
- python與nodejs寫爬蟲你更傾向於哪個一個?PythonNodeJS爬蟲
- 簡單瞭解python爬蟲Python爬蟲
- Python代理IP爬蟲的簡單使用Python爬蟲
- NodeJs 建立一個簡單的登陸註冊NodeJS
- 想做個防爬蟲的功能怎麼做爬蟲
- 一次簡陋的爬蟲爬蟲
- 爬蟲--Scrapy簡易爬蟲爬蟲
- phpspider簡單快速上手的php爬蟲框架PHPIDE爬蟲框架
- 情況最簡單下的爬蟲案例爬蟲
- Python爬蟲 --- 2.3 Scrapy 框架的簡單使用Python爬蟲框架
- 做個簡單的一年小結
- python 爬蟲 mc 皮膚站 little skin 的簡單爬取Python爬蟲
- 使用Python和requests庫的簡單爬蟲程式Python爬蟲
- Laravel 手動搭建簡單的資料爬蟲Laravel爬蟲
- 使用requests+BeautifulSoup的簡單爬蟲練習爬蟲
- 基於Python的簡單天氣爬蟲程式Python爬蟲
- 用PYTHON爬蟲簡單爬取網路小說Python爬蟲
- Python爬蟲筆記(一)——基礎知識簡單整理Python爬蟲筆記
- python爬蟲初探--第一個python爬蟲專案Python爬蟲
- 基於nodejs編寫小爬蟲NodeJS爬蟲
- nodejs + koa2 實現爬蟲NodeJS爬蟲
- nodejs eggjs框架 爬蟲 readhub.meNodeJS框架爬蟲
- 我的第一個 scrapy 爬蟲爬蟲
- 精通Scrapy網路爬蟲【一】第一個爬蟲專案爬蟲
- 大規模非同步新聞爬蟲:簡單的百度新聞爬蟲非同步爬蟲
- 一個很垃圾的整站爬取--Java爬蟲Java爬蟲