Node.js爬取妹子圖-crawler爬蟲的使用
去年10月份寫過《Node.js 2小時爬取驢媽媽8W+條旅遊資料》。之前做的是使用request 做網路請求和 cheerio做DOM解析。
後來在網上看見了crawler,昨天就把crawler
把玩了了一把。感覺使用起來還可以,他的作用和上面的兩個包的作用是一樣的。
這次我爬取的是妹子圖。
在爬取之前,還是建議先看看crawler怎麼使用。其實它的是有還是很簡單的。這裡不再贅述,請自行查閱文件。
再則就是好好看看妹子圖這個網頁地址的規律,是不是有防刷機制(同一個IP,短期內多次訪問,自定義的概念)。這裡我找到的規律是妹子圖的首頁:http://www.meizitu.com和http://www.meizitu.com/a/more_1.html開啟的效果是一樣的。而第2個連結地址,直接就可以顯示當前訪問的是第多少頁。
實操步驟:
1.計算總頁數
var c = new Crawler({
maxConnections : 10, // 最大連結數 10
retries: 5, // 失敗重連5次
// This will be called for each crawled page
callback : function (error, res, done) { // 執行下面的回撥,這個回撥不會執行
if(error){
console.log(error);
}else{
var $ = res.$;
console.log($("title").text());
}
done();
}
});
c.queue([{
uri: 'http://www.meizitu.com/a/more_1.html',
jQuery: true,
callback: function (error, res, done) {
if(error){
console.log(error);
}else{
var $ = res.$; // 這就可以想使用jQuery一個解析DOM了
var total_pag = 0;
$('#wp_page_numbers li a').each(function(index,item){
if ($(item).text() == '末頁') {
total_pag = $(item).attr('href');
var regexp = /[0-9]+/g;
total_pag = total_pag.match(regexp)[0]; // 總頁數
}
})
}
done();
}
}]);
這一步的操作是先看看這個有多少頁,計算出總頁數。
這裡的每一頁顯示的是一個主題,每個主題點進去才是詳情,我做的是先下載主題。
2.下載主題
function downloadContent(i,c){
var uri = 'http://www.meizitu.com/a/more_' + i + '.html';
c.queue([{
uri: uri,
jQuery: true,
callback: function (error, res, done) {
if(error){
console.log(error);
}else{
var $ = res.$;
var meiziSql = '';
$('.wp-item .pic a').each(function(index,item){
var href = $(item).attr('href'); // 獲取路徑uri
var regexp = /[0-9]+/g;
var artice_id = href.match(regexp)[0]; // 獲取文章ID
var title = $(item).children('img').attr('alt');
title = title.replace(/<[^>]+>/g,""); // 去掉 <b></b> 標籤
var src = $(item).children('img').attr('src');
var create_time = new Date().getTime();
if (href == 'http://www.meizitu.com/a/3900.html') {
title = title.replace(/'/g,''); // 這個的標題多了一個 單引號, mysql在插入的時候存在問題,所以這樣處理了一下
}
var values = "'" + artice_id + "'" + ','
+ "'" + title + "'" + ','
+ "'" + href + "',"
+ "'" + src + "'" + ','
+ "'" + create_time + "'";
meiziSql = meiziSql + 'insert ignore into meizitu_all(artice_id,title,href,src,create_time) VALUES(' + values + ');';
})
pool.getConnection(function(err, connection) {
if(err){
console.log('資料庫連線失敗',i);
}
connection.query(meiziSql,function (err, results) {
connection.release();
if (err){
console.log(err,i);
}else{
console.log('插入成功',i);
}
})
})
}
done();
}
}]);
}
。
這樣就可把把每頁的每個主題下載下來了。
一共2806個,哈哈,足夠看一年了,(如果你不會審美疲勞)。
看見了這裡function downloadContent(i,c)
,不知道大家會不會有什麼疑問?為什麼還有兩個引數,引數c
好書,那麼其中的i
是做什麼的呢?這裡暫且不說他是做什麼,下一篇大家就知道了。
這裡只說crawler。通過程式碼大家也看見了,crawler既可以發起網路請求也可以將DOM轉換成jQuery
形式,以便解析。
這裡所說了的爬蟲,加上之前我做的,其實都發起網路請求,獲取網頁的DOM,然後解析DOM節點。下一篇是提高爬取效率的async的使用。
相關文章
- [CareerCup] 10.5 Web Crawler 網路爬蟲Web爬蟲
- Python爬蟲入門教程 2-100 妹子圖網站爬取Python爬蟲網站
- Scrapy框架爬取海量妹子圖框架
- 爬蟲爬取微信小程式爬蟲微信小程式
- 爬蟲之股票定向爬取爬蟲
- 爬蟲福利----妹子圖網MM批量下載爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- 提高爬蟲爬取效率的辦法爬蟲
- 上天的Node.js之爬蟲篇 15行程式碼爬取京東資源Node.js爬蟲行程
- Java爬蟲批量爬取圖片Java爬蟲
- 如何合理控制爬蟲爬取速度?爬蟲
- Java爬蟲-爬取疫苗批次資訊Java爬蟲
- 分散式爬蟲之知乎使用者資訊爬取分散式爬蟲
- 爬蟲實戰(一):爬取微博使用者資訊爬蟲
- 如何提高爬取爬蟲採集的效率?爬蟲
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- Python使用多程式提高網路爬蟲的爬取速度Python爬蟲
- Python爬蟲教程-13-爬蟲使用cookie爬取登入後的頁面(人人網)(下)Python爬蟲Cookie
- Python爬蟲教程-12-爬蟲使用cookie爬取登入後的頁面(人人網)(上)Python爬蟲Cookie
- 教你用Python爬取妹子圖APPPythonAPP
- python 爬蟲 爬取 learnku 精華文章Python爬蟲
- python爬蟲——爬取大學排名資訊Python爬蟲
- node:爬蟲爬取網頁圖片爬蟲網頁
- 爬蟲---xpath解析(爬取美女圖片)爬蟲
- PHP 爬蟲爬取社群文章內容PHP爬蟲
- 一起學爬蟲——使用Beautiful Soup爬取網頁爬蟲網頁
- 一個很垃圾的整站爬取--Java爬蟲Java爬蟲
- python爬蟲十二:middlewares的使用,爬取糗事百科Python爬蟲
- 爬蟲福利二 之 妹子圖網MM批量下載爬蟲
- Python爬蟲之路-chrome在爬蟲中的使用Python爬蟲Chrome
- 爬蟲 Scrapy框架 爬取圖蟲圖片並下載爬蟲框架
- 如何使用robots禁止各大搜尋引擎爬蟲爬取網站爬蟲網站
- Python 爬蟲入門 (二) 使用Requests來爬取圖片Python爬蟲
- 【爬蟲】專案篇-使用selenium爬取大魚潮汐網爬蟲
- python爬蟲--爬取鏈家租房資訊Python爬蟲
- 擼個爬蟲,爬取電影種子爬蟲
- 爬蟲爬取資料如何繞開限制?爬蟲
- 爬蟲練習——爬取縱橫中文網爬蟲