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資料了。
解釋一下這段代碼之前我們先聊一下前置知識。
向一個網站發送請求,到底得到了什麼?
向一個網站發送請求的本質就是擷取該網站傳回的HTML頁面。這個過程可以分為以下幾個步驟:
- 建構HTTP請求:
- 确定請求方法(GET、POST、PUT、DELETE等)
- 設定請求頭(User-Agent、Accept、Referer等)
- 傳遞請求參數(查詢字元串、請求體等)
- 發送HTTP請求:
- 通過網絡協定(如TCP/IP)将請求發送到目标網站的伺服器
- 接收響應:
- 伺服器接收到請求後,會生成相應的HTML頁面作為響應内容
- 将HTML頁面通過網絡協定傳回給發起請求的用戶端
- 擷取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