nodejs入門之小爬蟲

node之小爬蟲

一.概念

​ 網絡爬蟲(又稱爲網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱爲網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲

二.基於https實現一個小爬蟲

其原理就是:通過代碼的方式,去請求這個網站,獲取這個網站的html字符串內容,通過https去請求別的網絡資源(一個對應的url地址其實就是一個網絡資源),若對方網站是http協議,則使用http模塊請求,然後對拉下來的html字符串內容進行各種解析工作,得到想要的數據.
在這裏,我們會使用一個後端的類似於jquyer的包,包名叫做cheerio.

​ cheerio 可以像jquery那樣去處理html字符串

// 引入https模塊
const https = require("https");
//引入第三方依賴包 cheerio 類似jquery的語法
const cheerio = require("cheerio");
//請求的路徑
const url = "https://www.zhipin.com/shenzhen/";


https.get(url, (res) => {
    let raw = "";
    //通過req的data事件監聽函數,每當接受到請求體的數據,就累加到raw變量中
    res.on("data", (chunk) => {
        raw += chunk;
    });
    //監聽 req 的 end 事件
    res.on("end", () => {
        findBoss(raw);
    });
});


let findBoss = (htmlStr) => {
    //裝載整個爬取的內容
    let result = [];
    //使用cheerio裝載整個html頁面
    const $ = cheerio.load(htmlStr);

    //類似於jquery的語法,去獲取想要得到的內容
    $(".job-menu dl").find('dd').each((index, item) => {
        let Name = $(item).find("b").text();
        let subName = [];
        $(item).find('a').each((k, v) => {
            subName.push($(v).text());
        });

        result.push({
            Name,
            subName
        });
    });

    console.log(result);
}

最後爬取到的結果爲:

[ { Name: '技術', subName: [ 'Java', 'PHP', 'web前端', '算法工程師' ] },
  { Name: '產品', subName: [ '產品經理', '產品總監', '數據產品經理' ] },
  { Name: '設計', subName: [ 'UI設計師', '平面設計師', '交互設計師' ] },
  { Name: '運營', subName: [ '新媒體運營', '產品運營', '網絡推廣' ] },
  { Name: '市場', subName: [ '市場營銷', '市場推廣', '品牌公關', '策劃經理' ] },
  { Name: '人事', subName: [ '人事/HR', '行政', '財務', '培訓', '績效考覈' ] },
  { Name: '高級管理', subName: [ '總裁/總經理/CEO', '分公司/代表處負責人' ] },
  { Name: '銷售', subName: [ '銷售專員', '銷售經理', '銷售工程師' ] },
  { Name: '媒體', subName: [ '文案', '廣告創意', '編輯', '記者', '媒介經理' ] },
  { Name: '金融', subName: [ '投資經理', '投資總監', '風控', '證券' ] },
  { Name: '教育培訓', subName: [ '課程設計', '教務管理', 'IT培訓' ] },
  { Name: '醫療健康', subName: [ '藥劑師', '營養師', '醫療器械研究' ] },
  { Name: '採購貿易', subName: [ '採購經理', '採購主管', '進出口貿易' ] },
  { Name: '供應鏈/物流', subName: [ '物流專員', '貿易跟單', '供應鏈經理' ] },
  { Name: '房地產/建築', subName: [ '物業管理', '房地產規劃開發' ] },
  { Name: '諮詢/翻譯/法律', subName: [ '企業管理諮詢', '事務所律師' ] },
  { Name: '旅遊', subName: [ '旅遊顧問', '導遊', '旅遊產品開發/策劃' ] },
  { Name: '服務業', subName: [ '酒店前臺', '客房服務員', '髮型師' ] },
  { Name: '生產製造', subName: [ '生產總監', '安全員', '質量管理/測試' ] } ]

我這邊寫的一個小示例是爬取boss直聘職位菜單的數據.那麼,這一個小小的爬蟲就實現了,其實還有很多內容,後面慢慢來擴展.

三.cheerio 第三方模塊

鏈接:https://www.npmjs.com/package/cheerio

cheerio: 簡單理解爲是使用在服務器端的 jquery。保留了 jquery 選擇器的相關功能,去掉了 DOM 操作功能。

1.安裝模塊

$ npm install cheerio

2. 引入

const cheerio =require('cheerio');

3.裝載

const $=cheerio.load('<div class="box">Hello World</div>');

4. 使用響應的API

類似於jquery操作

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