上篇文章介紹了爬蟲(chóng)的基本概念和基本原理瞻惋,這篇開(kāi)始我們一起來(lái)看看具體如何從網(wǎng)頁(yè)中爬取自己想要的數(shù)據(jù)。
在下面爬蟲(chóng)的栗子中享钞,我們使用nodejs來(lái)作為我們的運(yùn)行環(huán)境(我是前端工程師哦)钝荡!
一、準(zhǔn)備環(huán)境
1啸盏、nodejs環(huán)境安裝可以點(diǎn)擊這里nodejs中文網(wǎng)下載安裝包哦!
二骑祟、創(chuàng)建項(xiàng)目
1回懦、安裝好nodejs后气笙,運(yùn)行cmd切換到你想要?jiǎng)?chuàng)建的目錄;
2粉怕、mkdir myspider(創(chuàng)建myspider文件夾)健民;
3抒巢、cd 到myspider目錄下贫贝;
4、命令行輸入npm init(初始化該小項(xiàng)目):
此時(shí)需要填寫(xiě)一些項(xiàng)目信息蛉谜,你可以根據(jù)情況填寫(xiě)稚晚,當(dāng)然也可以一路回車(chē)哦。
執(zhí)行完成后會(huì)有一個(gè)packge.json配置文件:
5型诚、安裝第三方包庫(kù)
這些包庫(kù)在程序中引入會(huì)自動(dòng)加載的哦客燕。這些包庫(kù)的使用不僅會(huì)大大減少我們的代碼量,而且還會(huì)使我們的代碼更優(yōu)雅狰贯、更好維護(hù)哦也搓。
我們的所有第三方庫(kù)都是依賴(lài)于npm(node package manager)node包管理器來(lái)下載,只需要運(yùn)行npm install xxx --save來(lái)安裝涵紊,了解更多關(guān)于npm點(diǎn)擊這里查看傍妒。(我覺(jué)得這就是nodejs發(fā)展異常迅速的原因之一)
1)、express(npm install express --save)
express庫(kù)為我們提供了一系列便捷的方法摸柄,讓我們管理和構(gòu)建大型項(xiàng)目變的非常簡(jiǎn)單颤练;小項(xiàng)目就更不必說(shuō)了。更多關(guān)于express可以點(diǎn)擊這里查看驱负。
2)嗦玖、cheerio(npm install express --save)
cherrio 是為服務(wù)器特別定制的,快速跃脊、靈活宇挫、實(shí)施的jQuery核心實(shí)現(xiàn)。通過(guò)cherrio,我們就可以將抓取到的內(nèi)容酪术,像使用jquery的方式來(lái)使用了捞稿。可以點(diǎn)擊這里查看拼缝。
簡(jiǎn)單示例如下:
varcheerio = require('cheerio')娱局;
$= cheerio.load('Hello world');
$('h2.title').text('Hello there!');
3)、superagent(npm install superagent --save)
superagent模塊讓http請(qǐng)求變的更加簡(jiǎn)單咧七,了解更多點(diǎn)擊這里查看衰齐。最簡(jiǎn)單的一個(gè)示例如下:
var request = require('superagent');
request.get('http://example.com/search').end(function(res){});
有些模塊是nodejs中的內(nèi)置模塊不需要使用npm來(lái)下載的,還有其他第三方模塊會(huì)在后續(xù)文章中陸續(xù)介紹继阻。
三耻涛、開(kāi)始你的表演废酷。。抹缕。
安裝完上面的包澈蟆,我們就可以開(kāi)始簡(jiǎn)單的實(shí)踐嘍!在myspider文件加下創(chuàng)建app.js卓研。如下圖 :
var express=require('express');
var cheerio=require('cheerio');
var request=require('superagent');
var app=express();
app.get('/',function(req,res){
? ? console.log('hello man!');
});
app.listen(function(req,res) {
? ? console.log('server is running at port 3000!');
});
? ? 然后在命令行運(yùn)行 node app.js趴俘,如圖:
接著在瀏覽器地址欄輸入localhost:3000/,回車(chē)奏赘,如圖:
這樣一個(gè)簡(jiǎn)單的本地服務(wù)器模擬就實(shí)現(xiàn)了哦寥闪!
接下來(lái)我們就看看在服務(wù)器中使用request向我們的目標(biāo)網(wǎng)站發(fā)起http請(qǐng)求,將原來(lái)代碼改為:
app.get('/',function(req,res){
? ? request.get('http://www.dytt8.net').end(function(err,ress) {
? ? if(!err) {
? ? ? ? ? res.send('請(qǐng)求成功嘍磨淌!');
? ? ?}
? ? });
});
我們這樣就可以進(jìn)入我們要爬取網(wǎng)站了疲憋!
我們引入cheerio包幫我們實(shí)現(xiàn)我們想要爬取的內(nèi)容,將app.js代碼改一下:
var express=require('express');
var cheerio=require('cheerio');
var charset=require('superagent-charset');//解決網(wǎng)頁(yè)編碼問(wèn)題
var request=require('superagent');
var app=express();
charset(request);
app.get('/',function(req,res){
? ? request.get('http://www.dytt8.net').charset('gb2312').end(function(err,ress) {
//錯(cuò)誤處理
if(err){
? ? console.log(err);
}else{
? ? var $=cheerio.load(ress.text);//$和jquery中的選擇器類(lèi)似梁只,可以選擇網(wǎng)頁(yè)中所有的元素
? ? var ?navText=$('#menu .contain ul li a').text();
? ? res.end(navText);
}
});
});
app.listen(3000,function(req,res) {
? ? console.log('server is running at port 3000!');
});
瀏覽器運(yùn)行結(jié)果如下:
到此一個(gè)最簡(jiǎn)單的爬蟲(chóng)程序就基本實(shí)踐成功了缚柳,后續(xù)會(huì)逐步實(shí)現(xiàn)更為復(fù)雜的爬蟲(chóng)程序,希望對(duì)大家有所幫助搪锣。錯(cuò)誤難免秋忙,敬請(qǐng)斧正!