node抓取網頁的實現

一、前言

一直感覺爬蟲是個挺高端的東西 大數據時代 爬蟲顯得尤爲重要。經過一番探索,終於用node實現了這個功能,還包括對抓取內容的解析

二、正文

1、首先搭建一個http服務,這裏使用我們熟悉的koa(這個是非必須的 你也可以使用純node去抓 這裏主要爲了方便交互、看效果或者給非技術人員使用方便)
服務端 index.js 代碼

const Koa = require('koa');
const Router = require('koa-router'); // 路由
const {greenFmt, green, purple} = require('color7log'); // log工具 

const app = new Koa();
const router = new Router();

// 默認頁面
router.get('/', async (ctx, next) => {
    ctx.response.type = 'html';
    ctx.response.body = fs.createReadStream('./index.html');
});

app.use(router.routes())

app.listen(3000);
green('服務已運行,端口:3000')

node index.js啓動服務 即可訪問你的頁面了 當然項目下要有一個 index.html 內容請自己解決

2、核心代碼 使用node http模塊請求一個 html頁面

依賴模塊,請自行安裝

const cheerio = require('cheerio');
const zlib = require('zlib');
const iconv = require('iconv-lite');
var http = require('http') // 引入模塊

var url = 'http://kaijiang.500.com/shtml/ssq/03001.shtml'

// 獲取頁面源碼,調用方法進行解析及輸出
http.get(url, function(res) {
    var html = ''
    var arr = [];
    var chunks;
    res.on('data', function(data) {
        arr.push(data);
    })

    res.on('end', function() {
        chunks = Buffer.concat(arr);
        chunks = zlib.unzipSync(chunks) // 因爲頁面時gzip 所以要解壓 如果頁面時普通文本 不需要這個
        var body = iconv.decode(chunks, 'gbk');  // 轉化爲可見字符

        var cheerio = require('cheerio'), // 一個用法類似jq的庫 node後端使用 很方便的處理各種html模板
        $ = cheerio.load(body); // 初始化dom對象
        let content = $(".iSelectList a")
        let params = []
        for (let i = 0; i < content.length; i++) {
            params.push($(content[i]).html()) // 獲取每一期的編碼 方便以後遍歷使用
        }
        let nums = $(".ball_box01 li")
        for (let i = 0; i < nums.length; i++) {
            green($(nums[i]).html()) // 這裏實現了 抓鬼彩票的中獎號碼
        }
        
        // 把各期的編碼 寫入到文件 方便使用
        fs.writeFile("./data.txt", params.join(','), function(){
            console.log("完成")
        });
    })
}).on('error', function() {
    console.log('獲取數據出錯!')
})

看頁面是不是gzip的方法如下

clipboard.png

完整可運行代碼地址 node爬蟲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章