」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 JavaScript 進行網頁抓取和代理設定的初學者指南

使用 JavaScript 進行網頁抓取和代理設定的初學者指南

發佈於2024-11-09
瀏覽:521

Beginner

使用JavaScript程式碼模擬使用者操作,以取得所需資訊。包括模擬使用者開啟網頁、點擊連結、輸入關鍵字等操作,並從網頁中提取所需資訊。

Javascript網頁抓取的核心原理

使用JavaScript程式碼模擬使用者操作來取得所需資訊。包括模擬使用者開啟網頁、點擊連結、輸入關鍵字等操作,並從網頁中提取所需資訊。

Javascript 網頁抓取常用工具

您可以選擇使用Xmlhttprequest物件、Fetch Api、jQuery的Ajax方法等來請求和擷取資料。這些方法可讓您傳送 Http 請求並取得伺服器回應。

Javascript Web 抓取如何處理跨域問題?

由於瀏覽器的同源策略限制,Javascript無法直接存取其他網域下的資源。可以使用Jsonp、Cors等技術實現跨域請求,或使用代理、設定瀏覽器參數等方式解決跨域問題。

使用 Javascript 進行網頁抓取時設定代理 IP

使用Javascript進行網頁抓取時,設定代理可以有效隱藏真實IP位址、提高安全性或繞過某些存取限制。設定代理IP的步驟通常包括:

1. 獲取代理

首先,您需要獲得一個可用的代理。
代理通常由第三方服務提供者提供。您可以透過搜尋引擎或相關技術論壇找到可用的代理,並對其進行測試以確保其可用性。

2.設定代理伺服器

在JavaScript中,您可以透過設定係統屬性或使用特定的HTTP庫來指定代理伺服器資訊。
例如,使用http或https模組時,您可以建立新的Agent物件並設定其代理屬性。

3.發起請求

設定代理伺服器後,您可以透過代理發起網路請求來抓取網頁。

使用 Javascript 抓取時設定代理程式的範例

使用Javascript進行網頁抓取時設定代理程式的範例如下:

const http = require('http');
const https = require('https');

// Set IP address and port
const proxy = 'http://IP address:port';

http.globalAgent = new http.Agent({ proxy: proxy });
https.globalAgent = new https.Agent({ proxy: proxy });

// Use the http or https modules to make requests, they will automatically use the configured proxy
https.get('http://example.com', (res) => {
  let data = '';

  // Receive data fragment
  res.on('data', (chunk) => {
    data  = chunk;
  });

  // Data received
  res.on('end', () => {
    console.log(data);
  });
}).on('error', (err) => {
  console.error('Error: '   err.message);
});

‌注意‌:‌ 您需要將「http://IP位址:連接埠」替換為您實際取得的IP位址和連接埠號碼。 ‌‌

如何使用JavaScript在本機上儲存資料?

使用 JavaScript 在本地儲存資料有多種方法:

  • localStorage:長期資料儲存。除非手動刪除,否則資料將保留在瀏覽器中。您可以使用 localStorage.setItem(key, value) 儲存數據,使用 localStorage.getItem(key) 讀取數據,使用 localStorage.removeItem(key) 刪除資料。

  • sessionStorage:會話級儲存。瀏覽器關閉後資料就會消失。其用法與localStorage類似。

  • Cookie:儲存字串。大小限制約為 4KB。儲存時效性預設為會話等級。過期時間可以是

  • 手動設定。操作必須依賴伺服器。

  • IndexedDB:用於儲存大量結構化數據,包括檔案/blob。儲存容量理論上是無限的。
    透過以上步驟,就可以完成JavaScript抓取網頁資料並儲存的流程了。

版本聲明 本文轉載於:https://dev.to/lewis_kerr_2d0d4c5b886b02/beginners-guide-to-web-scraping-and-proxy-setup-with-javascript-2fdk?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼使用“shell_exec”從 PHP 調用時我的 Bash 腳本無法執行?
    為什麼使用“shell_exec”從 PHP 調用時我的 Bash 腳本無法執行?
    從PHP 執行Bash 指令:腳本執行失敗故障排除在這個問題中,我們遇到一位PHP 開發人員嘗試使用shell_exec 從PHP 執行bash 腳本。使用的語法為:$output = shell_exec("./script.sh var1 var2");但是,當呼叫指令時腳本...
    程式設計 發佈於2024-11-09
  • 為什麼按鈕不拉伸以用“display: block”和“width: auto”填充容器?
    為什麼按鈕不拉伸以用“display: block”和“width: auto”填充容器?
    為什麼「display: block」和「width: auto」不能拉伸按鈕來填滿容器? 當使用“display: block”和“ width: auto” 在按鈕上,它可能會拉伸並填充其容器。然而,情況並非總是如此。特別是,現代瀏覽器中的按鈕在這方面的行為與其他區塊元素不同。 這種行為背後的原...
    程式設計 發佈於2024-11-09
  • 在 Docker 容器上設定 Redmine
    在 Docker 容器上設定 Redmine
    Redmine 是一個靈活的開源專案管理和問題追蹤 Web 應用程式。它廣泛用於管理專案、追蹤錯誤以及處理任務和截止日期。 Redmine 使用 Ruby on Rails 開發,具有高度可自訂性,支援廣泛的團隊協作和專案組織功能。 Redmine 因其靈活性、客製化和開源特性而成為商業專案管理工...
    程式設計 發佈於2024-11-09
  • 哪種 HTML5 Reset CSS 提供最全面的覆蓋範圍?
    哪種 HTML5 Reset CSS 提供最全面的覆蓋範圍?
    哪種 HTML5 Reset CSS 提供廣泛的覆蓋範圍? 大量的瀏覽器版本為網頁設計帶來了挑戰,需要使用重置CSS 確保跨平台的樣式一致。然而,鑑於可用選項過多,選擇正確的重設 CSS 可能會令人畏懼。 html5reset.org 擁有全面的覆蓋範圍,不僅包括重置填充和邊距,還包括解決圖像的潛在...
    程式設計 發佈於2024-11-09
  • 棘手的 Golang 面試問題 - 部分數據競賽
    棘手的 Golang 面試問題 - 部分數據競賽
    Here is another code review interview question for you. This question is more advanced than the previous ones and is targeted toward a more senior aud...
    程式設計 發佈於2024-11-09
  • 如何在 Python 中按列值對散佈圖進行顏色編碼?
    如何在 Python 中按列值對散佈圖進行顏色編碼?
    Python 中按列值對散點圖進行顏色編碼在資料視覺化中,為不同類別分配顏色可以增強清晰度並揭示模式。此功能在 R 的 ggplot2 中很容易使用,但是我們如何使用 pandas 和 matplotlib 在 Python 中實現相同的功能? 更新:Seaborn 增強功能Since 原始答案,S...
    程式設計 發佈於2024-11-09
  • 如何將日期轉換為數位格式以進行繪圖?
    如何將日期轉換為數位格式以進行繪圖?
    將日期轉換為數位格式以進行繪圖當日期以不同格式儲存時,根據日期繪製資料可能具有挑戰性,例如「1991 年1 月2 日。」本文提供了一種將日期轉換為可以輕鬆在x 軸上繪製的數位格式的解決方案。 如問題所述,使用 strftime('%Y%m%d') 轉換日期僅靠這一點可能還不夠。若要解...
    程式設計 發佈於2024-11-09
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-09
  • 在 JavaScript 中快取數組長度比直接長度存取更快嗎?
    在 JavaScript 中快取數組長度比直接長度存取更快嗎?
    優化 JavaScript 中的陣列迭代:快取長度與直接長度存取循環數組是 JavaScript 中的基本操作。但最快的方法是什麼?傳統觀點認為,快取數組的長度可以透過避免重複計算來提高效能。然而,有些人認為現代編譯器優化了直接長度存取。 爭論:快取與直接存取傳統上,建議的方法是快取陣列長度: f...
    程式設計 發佈於2024-11-09
  • 如何使用純 JavaScript 切換元素類別?
    如何使用純 JavaScript 切換元素類別?
    使用純 JavaScript 切換元素類別:綜合指南簡介在 JavaScript 中,控制元素類別對於動態 Web 開發至關重要。一項常見任務是切換類別以更改元素的外觀或功能。雖然 jQuery 讓這項任務變得簡單,但了解如何使用純 JavaScript 來完成它是至關重要的。 jQuery 解決方...
    程式設計 發佈於2024-11-09
  • 如何使用 Base64 對 OpenSearch 外掛的映像進行編碼?
    如何使用 Base64 對 OpenSearch 外掛的映像進行編碼?
    為 OpenSearch 插件編碼映像為 Firefox 或 IE 等瀏覽器開發 OpenSearch 插件時,base64 編碼對於表示映像至關重要。具體實現方法如下:方法一:線上編碼訪問線上文件編碼網站,例如[Base64 Encode](https:// /www. base64encode....
    程式設計 發佈於2024-11-09
  • 使用 Java 的 JarOutputStream 建立 JAR 檔案時如何避免意外問題?
    使用 Java 的 JarOutputStream 建立 JAR 檔案時如何避免意外問題?
    對JAR 檔案所建立的JarOutputStream 進行故障排除使用java.util.jar.JarOutputStream 以程式設計方式建立JAR 檔案看起來很簡單,但某些細微差別可能會導致意外問題。本文探討了這些未記錄的怪癖,並提供了用於建立有效 JAR 檔案的全面解決方案。 了解怪癖使用...
    程式設計 發佈於2024-11-09
  • 如何在不中斷內容流的情況下將 Div 絕對放置在右側:解決 Float:right 與 Position:absolute 的困境
    如何在不中斷內容流的情況下將 Div 絕對放置在右側:解決 Float:right 與 Position:absolute 的困境
    右浮動和絕對定位困境已解決在您追求一個div 能夠無縫地將其自身與其父級右側對齊,同時避免干擾其他內容,您偶然發現了一個障礙: float:right 和float:right的衝突行為position:absolute.Float 和Absolute 的衝突性質Float:right 透過將其他元...
    程式設計 發佈於2024-11-09
  • 如何在不修改 http.ResponseWriter 的情況下記錄 HTTP 回應?
    如何在不修改 http.ResponseWriter 的情況下記錄 HTTP 回應?
    在http.HandleFunc 中記錄HTTP 回應本文討論了一種獲取HTTP 回應以進行日誌記錄的替代方法,而無需訴諸偽造請求或修改http.ResponseWriter。我們引入了中間件連結的概念,提供了函數式實作。 中介軟體連結中介軟體連結涉及將控制權傳遞給處理程序鏈,這些處理程序在主請求執...
    程式設計 發佈於2024-11-09
  • 如何處理跨平台 Go 庫中特定於作業系統的程式碼?
    如何處理跨平台 Go 庫中特定於作業系統的程式碼?
    如何利用特定於作業系統的程式碼的建構約束開發依賴於特定於作業系統的依賴項的跨平台Go 函式庫時,有必要區分建構不同作業系統的流程。解決方法如下:例如,讓我們考慮建立一個使用 Windows 的「encoding/osheb」套件和 Linux 的「encoding/olson」套件的函式庫。為了有效...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3