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的使用。
相關文章
- Python爬蟲入門教程 2-100 妹子圖網站爬取Python爬蟲網站
- Scrapy框架爬取海量妹子圖框架
- scrapy 也能爬取妹子圖?(5)
- Java爬蟲批量爬取圖片Java爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- 爬蟲福利----妹子圖網MM批量下載爬蟲
- 教你用Python爬取妹子圖APPPythonAPP
- 爬蟲 Scrapy框架 爬取圖蟲圖片並下載爬蟲框架
- node:爬蟲爬取網頁圖片爬蟲網頁
- 爬蟲---xpath解析(爬取美女圖片)爬蟲
- Python爬蟲—爬取某網站圖片Python爬蟲網站
- 爬蟲福利二 之 妹子圖網MM批量下載爬蟲
- Python爬蟲入門【5】:27270圖片爬取Python爬蟲
- 使用正則編寫簡單的爬蟲爬取某網站的圖片爬蟲網站
- Node JS爬蟲:爬取瀑布流網頁高清圖JS爬蟲網頁
- Python爬蟲實戰詳解:爬取圖片之家Python爬蟲
- 爬蟲之股票定向爬取爬蟲
- Python爬蟲入門【9】:圖蟲網多執行緒爬取Python爬蟲執行緒
- 網路爬蟲---從千圖網爬取圖片到本地爬蟲
- Python網路爬蟲2 - 爬取新浪微博使用者圖片Python爬蟲
- 提高爬蟲爬取效率的辦法爬蟲
- 新手爬蟲教程:Python爬取知乎文章中的圖片爬蟲Python
- python爬蟲十二:middlewares的使用,爬取糗事百科Python爬蟲
- Python使用多程式提高網路爬蟲的爬取速度Python爬蟲
- 老司機帶你用python來爬取妹子圖Python
- 用Node.js寫爬蟲,擼羞羞的圖片Node.js爬蟲
- Python爬蟲入門【11】:半次元COS圖爬取Python爬蟲
- Python爬蟲新手教程: 知乎文章圖片爬取器Python爬蟲
- Python爬蟲遞迴呼叫爬取動漫美女圖片Python爬蟲遞迴
- Python爬蟲教程-13-爬蟲使用cookie爬取登入後的頁面(人人網)(下)Python爬蟲Cookie
- Python爬蟲教程-12-爬蟲使用cookie爬取登入後的頁面(人人網)(上)Python爬蟲Cookie
- 爬蟲爬取微信小程式爬蟲微信小程式
- 如何合理控制爬蟲爬取速度?爬蟲
- 簡單的爬蟲:爬取網站內容正文與圖片爬蟲網站
- 如何提高爬取爬蟲採集的效率?爬蟲
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- 教你用Python爬取圖蟲網Python
- Python Selenium+PhantomJs 爬煎蛋妹子圖PythonJS