天天看點

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

網絡爬蟲開發: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 movies
  else:
    print("失敗")

url = "https://movie.douban.com/chart"

# 爬取url裡的電影資料
movies = fetch_movie_list(url)           

這段代碼我們就能夠擷取到相應的html資料了。

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

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

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

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

  1. 建構HTTP請求:
    • 确定請求方法(GET、POST、PUT、DELETE等)
    • 設定請求頭(User-Agent、Accept、Referer等)
    • 傳遞請求參數(查詢字元串、請求體等)
  1. 發送HTTP請求:
    • 通過網絡協定(如TCP/IP)将請求發送到目标網站的伺服器
  1. 接收響應:
    • 伺服器接收到請求後,會生成相應的HTML頁面作為響應内容
    • 将HTML頁面通過網絡協定傳回給發起請求的用戶端
  1. 擷取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與Python特性的小差異

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

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

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

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

作者:愛吃洋芋絲呦

連結:https://juejin.cn/post/7391699424793591845

繼續閱讀