nodejs學習筆記(1)——網路爬蟲

来源:https://www.cnblogs.com/zhoutuan/archive/2018/04/08/8746478.html
-Advertisement-
Play Games

不知不覺做nodejs開發已經將近一年多了,過程中學了很多,也忘了很多,所以還是堅持在博客裡面留下點內容,方便以後查看。 本文主要實現一個簡單的網站爬蟲功能,抓取網站裡面的圖片以及內容。 在抓取之前用到了superagent、cheerio、request、fs模塊。 superagent和http ...


不知不覺做nodejs開發已經將近一年多了,過程中學了很多,也忘了很多,所以還是堅持在博客裡面留下點內容,方便以後查看。

本文主要實現一個簡單的網站爬蟲功能,抓取網站裡面的圖片以及內容。

在抓取之前用到了superagent、cheerio、request、fs模塊。

superagent和http用途其實是差不多的,都是通過url模擬請求,為了記錄一下用法,這裡兩個都用了;cheerio我個人理解就相當於一個服務端的jquery,可以對響應的內容進行過濾,用法跟jquery一樣;fs模塊是nodejs裡面的文件操作模塊。

以爬取360網站為例:

 1 /**
 2  * 網路爬蟲
 3  */
 4 
 5 let sup = require("superagent");
 6 let cheer = require("cheerio");
 7 let request = require("request");
 8 let fs = require("fs");
 9 const domain = "www.360.com";
10 const url = "https://" + domain + "/";
11 sup.get(url).end(function (err, res, body) {
12     if (err) {
13         console.log(err);
14     } else {
15         console.log('----------------------');
16         //找出頁面響應的文本內容 
17         let $ = cheer.load(res.text);
18         //通過cheerio過濾內容  用法與jquery一樣   如:找出裡面所有的圖片
19         let rst = $("img"); 
20         rst.each(function (idx, item) {
21             //這裡request.get的encoding一定要設置為null,api文檔有說明,為null的時候響應文本會返回一個buffer
22             let imgUrl = ((item.attribs.src.includes(('http://', 'https://'))) ? url : 'http:') + item.attribs.src;

23 console.log('********************', imgUrl);
24             request.get({ url: imgUrl, encoding: null }, function (error, response, body) {
25                 if (error) {
26                     console.error(error);
27                 } else {
28                     //持續下載數據
29                     let dir = domain + "/" + item.attribs.src.replace('//', '');
30                     let path = dir.split('/');
31                     //去掉最後的文件名部分
32                     path.pop();
33                     if (fs.existsSync(path.join('/')) == false) {
34                         //迴圈創建文件夾
35                         var dirInfo = "";
36                         for (var i = 0; i < path.length; i++) {
37                             dirInfo += path[i] + "/"
38                             if (fs.existsSync(dirInfo) == false && dirInfo != '')
39                                 fs.mkdirSync(dirInfo);
40                         }
41                     }
42                     //把body的的string轉為object寫入到文件
43                     fs.writeFile(dir, body, (err) => {
44                         console.log('----------------', err);
45                     })
46                 }
47             })
48         })
49     }
50 })

 

以上為個人學習記錄,只是一個學習的知識點分享,如果不對之處,請留言指出。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、用Log列印日誌 二、Toast用法 三、在活動中使用Menu 首先在res目錄下新建menu文件夾,接著在這個文件夾下新建一個名叫main的菜單文件,在main.xml中添加如下代碼 回到Activity中重寫onCreateOptionsMenu()方法,編寫如下代碼(返回true表示允許創 ...
  • 一、view鉤子 view鉤子有2個,ngAfterViewInit和ngAfterViewChecked鉤子。 1、實現ngAfterViewInit和ngAfterViewChecked鉤子時註意事項 以父組件調用子組件方法 中例子為基礎,在父組件中實現ngAfterViewInit和ngAft ...
  • 一、什麼是slot 在使用組件時,我們常常要像這樣組合它們: 當需要讓組件組合使用,混合父組件的內容與子組件的模板時,就會用到slot , 這個過程叫作內容分發( transclusion )。 註意兩點: 1.< app>組件不知道它的掛載點會有什麼內容。掛載點的內容是由<app >的父組件決定的 ...
  • 原型與原型鏈是學習JavaScript這門語言不能不理解的兩個重要概念,為什麼?因為JavaScript是一門基於原型的語言。 怎麼理解“JavaScript是一門基於原型的語言”?在軟體設計模式中,有一種模式叫做原型模式,JavaScript正是利用這種模式而被創建出來。先來瞭解下原型模式的概念... ...
  • 自己跟著網上教程複習上學期的HTML+CSS,因為已經忘得差不多了,而且現在學的js也要以HTML+CSS為基礎,堅持每天持續更新。 n B/S 網路結構 Browser/Server 瀏覽器/伺服器,這是現在最流行的網路模式。如新浪網、鳳凰網等。 C/S Client/Server 客戶端/伺服器 ...
  • 昨天編輯朋友圈文章,無法修改提交的bug終於找到了,原因是用錯了一個標點... 把req點body寫成req逗號body,印象深刻,發人深省。 編輯後,終於可以修改成功了。 雖然只是一個小小的bug,,但是印象實在太過深刻。 所以說寫代碼的時候不用心,改bug的時候就耽誤一天。 晚上還嘗試做了一個刪 ...
  • 組件之間通信可以用下圖表示: 組件關係可分為父子組件通信、兄弟組件通信、跨級組件通信。 一、自定義事件 當子組件需要向父組件傳遞數據時,就要用到自定義事件。 子組件用$emit ()來觸發事件,父組件用$on()來監昕子組件的事件。 父組件可以直接在子組件的自定義標簽上使用v-on 來監昕子組件觸發 ...
  • vueJs 源碼解析 (三) 具體代碼 在之前的文章中提到了 vuejs 源碼中的 架構部分,以及 談論到了 vue 源碼三要素 vm、compiler、watcher 這三要素,那麼今天我們就從這三要素逐步瞭解清楚 好了,話不多說, let's do it 在這之前,我們需要 對上文中講到的 vu ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...