国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

性感慕課-在線被爬

劉德剛 / 1566人閱讀

摘要:剛開始寫的時候我把聲明在了全局,以至于返回成下面這組數據爬取課程詳情頁的信息在我們有了所有課程詳情頁的后,我們開始爬取里面的內容。

引言

在學習了 alsotang 大神的 《Node.js包教不包會》后的一個爬蟲小練習,期間也碰到挺多小問題,也學到了很多小東西。「單押×3」

這里是大神的教程地址 https://github.com/alsotang/node-lessons,

下面是自己的爬取效果圖

)

同時推薦一個谷歌插件 JSONView,會將 JSON 格式的數據轉化成上面圖的格式

imoocSpider練習源碼

搭建服務器

首先,搭建一個 http 服務

var http = require("http");
var express = require("express");

var app = express();

http.createServer(app).listen(8080);

app.get("/", function(req, res) {
  //code here...
})

用的是 express 搭建的,當然也可以用原生的,在這里自己比較習慣用 express

在線爬蟲

在這里用到的是 superagentcheerio 來爬取頁面,這里有相關文檔可以參考: superagent中文文檔、cheerio,都是來自 cnode 社區,當然英語能力較好的也可以參考原文檔。在這里就只貼出這兩個

爬取頁面鏈接 https://www.imooc.com/course/...

我們是要爬取慕課網前端開發八個頁面的課程中的一些信息,但是打開此鏈接發現每個頁面只有課程的名稱,并沒有老師的名稱和一些課程的主要信息。因此我們還需要獲取并根據每個課程的 url 進行爬取。

獲取課程詳情頁鏈接

那我們先來爬取八個頁面的所有課程詳情頁的 url

通過點擊對應頁面的按鈕,發現每次都會發送一個新的 get 請求,請求的鏈接就是對應的頁面,而這里的鏈接只有 page 屬性是不同的,因此我們通過動態改變 page 就可以模擬點擊對應頁來獲取對應頁的信息

var pages = 1;
var baseUrl = "https://www.imooc.com/course/list/";

var params = {
  c: "fe",
  page: page
};

superagent
  .get(baseUrl)
  .query(params)
  .end(function(err, content) {
    var topicUrls = [];
    var $ = cheerio.load(content.text);
    var courseCard = $(".course-card-container");
    courseCard.each(function(index, element) {
      var $element = $(element);
      var href = url.resolve(
        homeUrl,
        $element.find(".course-card").attr("href")
      );

      topicUrls.push(href);
    });
    console.log(topicUrls);
  });

這樣就可以獲取到了第一個頁面的 25 個課程的詳情頁的 url,那要如何獲取八個頁面呢。

async

因為有些網站通常都會有安全限制,不會允許同一個域名有過大的高并發數,因此需要限制并發數,在這里用我們用到了 async 這個庫。這里是其 github

我們首先把前面代碼封裝成一個函數

var baseUrl = "https://www.imooc.com/course/list/";
var fetchUrl = function(page, callback) {
    count++;
    console.log("當前并發數", count);

    var params = {
      c: "fe",
      page: page
    };

    superagent
      .get(baseUrl)
      .query(params)
      .end(function(err, content) {
        var topicUrls = [];
        var $ = cheerio.load(content.text);
        var courseCard = $(".course-card-container");
        courseCard.each(function(index, element) {
          var $element = $(element);
          var href = url.resolve(
            homeUrl,
            $element.find(".course-card").attr("href")
          );

          topicUrls.push(href);
        });

        callback(err, topicUrls);
        count--;
        console.log("釋放并發數后當前并發數", count);
        
      });
  };

然后用 async 控制并發數和八個頁面的抓取

var pages = [1, 2, 3, 4, 5, 6, 7, 8];
async.mapLimit(
    pages, 
    5,
    function(page, callback) {
      fetchUrl(page, callback);
    },
    function(err, result) {
      if (err) console.log(err);

      console.log(result)
    }
  );
});

這樣所有的 url 就被打印出來,這里要注意一下,async 會自動把第三個函數參數的返回值合并成一個數組給第四個函數參數的 result 參數。剛開始寫的時候我把 topicUrls 聲明在了全局,以至于返回成下面這組數據

爬取課程詳情頁的信息

在我們有了所有課程詳情頁的 url 后,我們開始爬取里面的內容。首先定義一個函數

var fetchMsg = function(topicUrl, callback) {
    console.log("開啟新一輪抓取")
    superagent
      .get(topicUrl)
      .end(function(err, content){
        var Item = [];
        var $ = cheerio.load(content.text);
        var title = $(".hd .l").text().trim();//課程名字
        var teacher = $(".tit a").text().trim();//老師名字
        var level = $(".meta-value").eq(0).text().trim();//難度
        var time = $(".meta-value").eq(1).text().trim();//時長
        var grade = $(".meta-value").eq(3).text().trim();//評分

        Item.push({
          title: title,
          teacher: teacher,
          level: level,
          time: time,
          grade: grade,
          href: topicUrl
        })


        callback(null, Item);
      })
  };

然后用 async 控制并發爬取

//result 為上文中的 result,下面的代碼也都是在上文中的第四個參數中

var topicUrls = result; //獲取所有 url ,但是大數組里面有 8 個小數組

var Urls = [];
//將大數組合并
for(let i=0,l=topicUrls.length;i

這里要注意一個小問題,就是 result 獲取到的 url 結構是一個大數組里面包含八個小數組,因此需要將其小數組先合并成一個大數組。

最后

項目源碼

原文地址

每天探索一點點,每天進步一點點。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95057.html

相關文章

  • 慕課網_《如何使用高德云圖在線制作屬于你的地圖》學習總結

    摘要:時間年月日星期日說明本文部分內容均來自慕課網。用戶可以在服務器端調用云存儲云檢索從而構建自己的存儲和檢索服務,甚至可以制作自己的數據管理臺。 時間:2017年08月13日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:云圖產品介紹 1-1 云圖產品介紹...

    k00baa 評論0 收藏0
  • 慕課網_《如何使用高德云圖在線制作屬于你的地圖》學習總結

    摘要:時間年月日星期日說明本文部分內容均來自慕課網。用戶可以在服務器端調用云存儲云檢索從而構建自己的存儲和檢索服務,甚至可以制作自己的數據管理臺。 時間:2017年08月13日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:云圖產品介紹 1-1 云圖產品介紹...

    afishhhhh 評論0 收藏0
  • 玩轉3D Swiper性感秀之思路分析總結

    摘要:前言繼一次的魔方之后,這次帶你一起玩轉性感美女秀,正常套路,請先一堵為快,有興趣繼續,沒興趣也可以看看美女養眼哦 showImg(https://segmentfault.com/img/bVbi4d2?w=1008&h=298); 前言   繼一次的3D魔方之后,這次帶你一起玩轉性感美女秀,正常套路,請先一堵為快,有興趣繼續,沒興趣也可以看看美女養眼哦

    Zoom 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<