網絡爬蟲開發:JavaScript與Python特性的小差異

JavaScript

JavaScript具有以下一些主要特點:

  • 動態類型: JavaScript是一種動態類型語言,變量可以存儲任意類型的數據,無需事先聲明變量的類型。
  • 事件驅動:JavaScript主要用于處理用戶在瀏覽器中的各種交互事件,如單擊、鼠標移動、鍵盤輸入等。
  • 面向對象:JavaScript雖然不是一種嚴格的面向對象語言,但它支持對象、繼承等面向對象編程概念。
  • 函數式編程:JavaScript支持函數式編程,函數可作為一等公民,可以賦值給變量、作為參數傳遞給其他函數。
  • 異步編程:JavaScript擅長異步編程,可以利用回調函數、Promise、async/await等機制來處理異步操作。

Python

Python是一種通用編程語言:

  • 數據分析和科學計算:Python擁有豐富的數據分析和科學計算庫,如NumPy、Pandas、Matplotlib等,廣泛應用于數據挖掘、機器學習等場景。
  • 人工智能和機器學習:Python在人工智能和機器學習領域非常流行,有TensorFlow、PyTorch等強大的深度學習庫。
  • Web開發:Python有Django、Flask等流行的Web框架,可用于開發動態網站和Web應用程序。
  • 系統編程和自動化:Python擅長系統編程和自動化任務,可用于編寫腳本、系統管理等。
  • 數據可視化:Python有豐富的可視化庫,如Matplotlib、Seaborn,可用于生成各種圖表和可視化效果。
  • 教育和科研:Python簡單易學,被廣泛應用于編程教育和科學研究領域。

對比

Python更加通用和易學,適合初學者和從事數據分析、機器學習等工作的開發者;而JavaScript則更擅長web開發和交互式應用程序。

爬蟲代碼書寫

這里主要講解python的爬蟲代碼書寫,我們使用colab平臺進行代碼的編寫。

Google Colab(Colaboratory)是一個基于瀏覽器的免費Jupyter Notebook環境,它為用戶提供了一個免費的云端計算平臺,用于編寫和運行代碼,尤其適合機器學習和數據科學領域的開發和研究。

首先我們先安裝依賴。

# python 請求庫
! pip install requests
# python dom 查找
! pip install beautifulsoup4

接下來我們就開始去編寫獲取數據的代碼,這里我們通過豆瓣電影排行榜 (douban.com)這個鏈接去獲取電影的數據。

首先看以下代碼:

# 引入請求庫
import requests
from bs4 import BeautifulSoup# 爬取url里的電影數據
def fetch_movie_list(url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'}response = requests.get(url,headers = headers)if(response.status_code == 200):soup = BeautifulSoup(response.text,'html.parser')movie_list = []movies = soup.select('#wrapper #content .article .item')print(len(movies))all_movies_text = ''.join([movie.prettify() for movie in movies])print(all_movies_text)print(movies)# 拿到數據就交給ai分析return movieselse:print("失敗")url = "https://movie.douban.com/chart"# 爬取url里的電影數據
movies = fetch_movie_list(url)

這段代碼我們就能夠獲取到相應的html數據了。

解釋一下這段代碼之前我們先聊一下前置知識。

向一個網站發送請求,到底得到了什么?

向一個網站發送請求的本質就是獲取該網站返回的HTML頁面。這個過程可以分為以下幾個步驟:

1. 構建HTTP請求:

  • 確定請求方法(GET、POST、PUT、DELETE等)
  • 設置請求頭(User-Agent、Accept、Referer等)
  • 傳遞請求參數(查詢字符串、請求體等)

2. 發送HTTP請求:

  • 通過網絡協議(如TCP/IP)將請求發送到目標網站的服務器

3. 接收響應:

  • 服務器接收到請求后,會生成相應的HTML頁面作為響應內容
  • 將HTML頁面通過網絡協議返回給發起請求的客戶端

4. 獲取HTML頁面:

  • 客戶端接收到服務器返回的HTML頁面
  • 解析和處理這個HTML頁面,提取所需的信息

這個過程中,獲取HTML頁面是關鍵目標。HTML頁面包含了網站的結構、內容和樣式信息,通過解析和分析這個HTML。

既然我們向一個網站發送請求可以獲取到html結構,這不就代表著我們可以通過分析html來獲取數據。

接下來就繼續分析上面的代碼。

講解一下:

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
}

這個請求頭其實就是告訴網站,我是真人,不是程序

  • Mozilla/5.0 是一個標準的瀏覽器標識前綴。
  • (Windows NT 10.0; Win64; x64) 表示操作系統是 Windows 10 64 位版本。
  • AppleWebKit/537.36 說明使用了基于 WebKit 537.36 版本的渲染引擎。
  • (KHTML, like Gecko) 表示瀏覽器內核與 KHTML 和 Gecko 引擎相似。
  • Chrome/125.0.0.0 說明瀏覽器是 Google Chrome 125.0.0.0 版本。
  • Safari/537.36 也表示使用了 Safari 瀏覽器的一些特性。
  • Edg/125.0.0.0 則表示使用了 Microsoft Edge 125.0.0.0 版本。

那么我們要如何獲取到自己瀏覽器的這份User-Agent數據呢?

很簡單,只需要在瀏覽器的控制臺輸入navigator.userAgent就可以獲取到了

繼續分析,我們以前寫JavaScript的代碼時,在遇到了發送請求時,都是需要去await的。

但是為什么Python代碼不需要這樣做呢?

這就是因為JavaScript是異步的,Python是同步的。

JavaScript就需要使用關鍵詞await將異步代碼塊變為同步代碼。

作者:愛吃土豆絲呦
鏈接:https://juejin.cn/post/7391699424793591845

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45831.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

group by 與 distinct去重性能

GROUP BY和DISTINCT在數據庫查詢中都可以用于去重,但它們的性能差異取決于多個因素,包括數據集的大小、數據庫的結構和索引、以及查詢的具體內容。 處理方式: DISTINCT:它會掃描整個數據集,然后刪除重復的記錄&#xf…

機體坐標系和導航坐標系

目錄 機體坐標系(Body Frame)例子:無人機的機體坐標系 導航坐標系(Navigation Frame)例子:地球固定的導航坐標系 具體例子說明機體坐標系描述導航坐標系描述 總結 機體坐標系(Body Frame&#x…

什么是大數據信用?它的作用有哪些?怎么查詢大數據?

在金融行業中,風險管理是至關重要的一環。傳統的信用評估方法主要基于借款人的財務狀況和信用歷史,但這些信息往往無法全面反映借款人的信用狀況。大數據信用的出現為金融風控提供了新的解決方案。 首先,大數據信用可以為金融機構提供更全面的…

jmeter持續學習之---控制器

IF控制器 下面這種寫法jmeter不推薦有性能的問題 jmeter推薦勾選上的這種寫法 使用"Interpret Condition as Variable Expression"工具的性能要好一些 循環控制器 ForEach控制器 與用戶定義的變量或者正則表達式提取器配合使用,循環讀取。用戶定義的變量或者正則…

Vue 接口用FormData() 提交數據

例子: let data { id: 12, name: 測試, list: [{ id: 22, name: "za", age: 12 }] };// 創建 FormData 實例 要使用 FormData 將數據提交給接口,首先需要了解 FormData 是如何工作的。FormData 是一種用于異步上傳數據的表單數據結構&#xf…

C語言-分支與循環(2)

目錄 1、while循環 1.1 if 和 while 的對比 1.2 while 語句的執行流程 6.3 while循環簡單例題 2、for 循環 2.1 語法形式 2.2 for循環與while循環對比 2.3 for循環的執行流程 2.4 for循環的簡單例題 2.5 擴展:for循環的初始化,判斷,…

django學習入門系列之第四點《圖標》

文章目錄 圖標往期回顧 圖標 圖標網站: Font Awesome,一套絕佳的圖標字體庫和CSS框架 (dashgame.com) bootstrap提供的不多 注意,要用框架啟動,但用html啟動的話是用不了的(圖標啟動不了) 如何使用 如果…

DAMA學習筆記(六)-數據安全

1.引言 數據安全包括安全策略和過程的規劃、建立與執行,為數據和信息資產提供正確的身份驗證、授權、訪問和審計。數據安全實踐的目標是根據隱私和保密法規、合同協議和業務要求來保護信息資產。這些要求來自以下幾個方面: 1)利益相關方: 應識別利益相關…

YOLO--置信度(超詳細解讀)

YOLO(You Only Look Once)算法中的置信度(Confidence)是一個關鍵概念,用于評估模型對預測框內存在目標對象的信心程度以及預測框對目標對象位置的準確性。 一、置信度的定義 數值范圍:置信度是一個介于0和…

ES6 對象的擴展(十五)

1. 屬性的簡潔表示(Property Shorthand) 特性:在對象字面量中,如果屬性名和變量名相同,可以省略屬性名,直接使用變量值。 用法:簡化對象字面量的書寫。 const x 1, y 2; const obj { x, y …

vscode 打開遠程bug vscode Failed to parse remote port from server output

vscode 打開遠程bug vscode Failed to parse remote port from server output 原因如圖: 解決:

網絡濾波器、EMI濾波器與EMC濾波器在電子元器件中的分類關系

在電子工程領域,濾波器作為關鍵的電子元器件,廣泛應用于信號處理、電磁兼容性和電磁干擾抑制等方面。本文將詳細介紹網絡濾波器、EMI濾波器和EMC濾波器的基本概念、工作原理及其在電子元器件中的分類關系。 一、網絡濾波器 網絡濾波器是一種通過處理信號…

Laravel與現代前端:Vue.js與React的無縫集成

Laravel與現代前端:Vue.js與React的無縫集成 在現代Web開發中,Laravel作為后端框架的佼佼者,與前端技術如Vue.js和React的結合,能夠創造出功能強大且用戶友好的應用。本文將詳細介紹如何在Laravel項目中集成Vue.js和React&#x…

臉書登錄指南:如何在同一臺設備登錄多個Facebook賬號?

海外社媒營銷人員和跨境賣家現在越來越依賴社交媒體平臺來拓展業務和接觸潛在客戶,尤其是Facebook。然而,在進行臉書登錄時,你可能會問:如何在同一臺設備上登錄多個Facebook賬號,而不違反Facebook的使用條款&#xff1…

Android 性能優化之卡頓優化

文章目錄 Android 性能優化之卡頓優化卡頓檢測TraceView配置缺點 StricktMode配置違規代碼 BlockCanary配置問題代碼缺點 ANRANR原因ANRWatchDog監測解決方案 Android 性能優化之卡頓優化 卡頓檢測 TraceViewStricktModelBlockCanary TraceView 配置 Debug.startMethodTra…

vivado 2019.2/modelsim SE-64 2019.2聯合仿真

參考鏈接 需要修改的地方: 編譯時幾個VHDL的庫會報錯,將language改為verilogfamily只選擇當前板子(artix-7),速度會更快,錯誤率更低compile library path最好選擇vivado安裝路徑下的位置,很久之…

怎么創一個新的vue3項目

創建一個新的Vue 3項目可以通過多種方式,以下是基于Vue CLI(命令行界面)和Vue官方新的腳手架工具create-vue的詳細步驟。 使用Vue CLI創建Vue 3項目 安裝Vue CLI: 確保你已經安裝了Node.js(建議使用LTS版本&#xff…

Python 基礎——元組

1.元組:元組元素不能修改 tuple1 (1, 2, 3, 4, 5, 6) tuple1[2] 3 #該代碼會顯示運行錯誤 2.元組的一些操作 #1. tuple1 (1, 2, 3, 4, 5, 6) tuple2 tuple1[:]#將tuple1復制到tuple2#2. tuple1 (1, 2, 3, 4, 5, 6) tuple1[:4] #輸出結果為(1&am…

用于大規模圖像識別的深度卷積網絡

概述 論文地址:https://arxiv.org/pdf/1409.1556.pdf 這項研究探討了卷積網絡深度對圖像識別準確性的影響。重要的是,對具有小型卷積濾波器的網絡進行的評估表明,具有 16-19 個權重層的深度網絡的性能優于傳統配置。這些結果使得該模型在20…

把ros消息轉換成中文輸出

把ros消息轉換成中文輸出 c實現 發布 //發布性能評估數據 /trilateration_time_log void publishTrilaterationLog(const int reflectorPanelPoints_size,const double duration_count,const std::string& resultType,const std::string& resultChineseMessage,cons…