iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
佛心分享-IT 人自學之術

Python學習馬拉松:30天挑戰系列 第 14

Day14. 網路爬蟲Program that Surf the Web

  • 分享至 

  • xImage
  •  
  • 表示簡單字串:
    -每個字元都用一個0到255之間的數字表示,並儲存在8位元的記憶體中。
    -我們將「8位元(bits)的記憶體」稱為一個「位元組(byte)」。
    -ord() 函數可以告訴我們一個ASCII字元的數字值。
    ◆ ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是一種常用的字元編碼,將英文字母、數字和一些特殊符號對應到特定的數字。
    -舉例:
    https://ithelp.ithome.com.tw/upload/images/20240928/20168364phoIgOW11d.png

  • 多位元組字符(Multi-Byte Characters):
    -為了表示各種語言的豐富字符,電腦不再僅用一個位元組來代表一個字符,而是使用多個位元組。
    -UTF-16、UTF-32、UTF-8: 這三種是常見的多位元組字符編碼方式。
    -UTF-16: 每個字符固定使用兩個位元組來表示。
    -UTF-32: 每個字符固定使用四個位元組來表示。
    -UTF-8:
    ◆ 可變長度: 根據字符的不同,使用 1 到 4 個位元組來表示。
    ◆ 與 ASCII 相容: ASCII 字符在 UTF-8 中只佔用一個位元組,因此 UTF-8 檔案可以直接用 ASCII 編碼的程式開啟。
    ◆ 自動偵測: 許多程式可以自動偵測檔案是使用 ASCII 還是 UTF-8 編碼。
    ◆ 廣泛應用: UTF-8 是目前網路上最常用的字符編碼方式。

  • Python中的兩種字串:
    -字串型態:
    ◆ Python 2: 有兩種主要的字串型態:
    str: 通常是 ASCII 編碼,只支援有限的字元集。
    unicode: 用來表示 Unicode 字符,需要加上 u 前綴。
    ◆ Python 3: 只有一種字串型態 str,且預設為 Unicode 編碼,支援更廣泛的字符集。
    -bytes 型態:
    ◆ Python 2: 字串可以用 b 前綴轉換為 bytes 型態,表示位元組序列。
    ◆ Python 3: bytes 型態和 str 型態是分開的,用於表示原始的位元組數據。
    -舉例:
    https://ithelp.ithome.com.tw/upload/images/20240928/201683642imRkkvMLv.png

  • Python3與 Unicode:
    -Python 3中的所有字串內部都是Unicode: 這意味著,Python 3 在處理文字時,預設採用Unicode編碼,能夠表示世界上大多數的文字。
    -簡化字串操作: 這樣的設計簡化了程式設計師在處理不同語言文字時的複雜性。
    -網路通訊: 當Python程式與網路資源(例如伺服器、資料庫)進行互動時,通常需要將Unicode字串編碼為特定格式(如UTF-8)才能傳輸。

  • Python字串與位元組的轉換:
    -網路傳輸以位元組為單位: 當我們透過網路傳送資料時,實際上傳送的是位元組 (bytes) 的序列,而不是直接的文字。
    -字串需要編碼: 在 Python 3 中,字串以 Unicode 表示,為了能夠在網路中傳輸,需要將 Unicode 字串編碼成特定的位元組序列,常見的編碼方式有 UTF-8、ASCII 等。
    -位元組需要解碼: 從網路接收到的位元組序列,需要根據其編碼方式進行解碼,才能轉換回 Python 的字串。
    -舉例:
    https://ithelp.ithome.com.tw/upload/images/20240928/20168364btkrRUSvWn.png
    -程式碼說明:
    ◆ mysock.recv(512): 這行程式碼從網路連接 mysock 中接收最多 512 個位元組的資料,並將其存儲在變數 data中。
    ◆ if (len(data) < 1): 判斷接收到的資料長度是否為 0,如果為 0,表示連接已經關閉,跳出迴圈。
    ◆ mystring = data.decode(): 將接收到的位元組序列 data 解碼成字串,並將結果存儲在變數 mystring 中。這裡默認使用 UTF-8 編碼進行解碼。
    ◆ print(mystring): 將解碼後的字串輸出到控制台。
    ◆ 這段程式碼實現了一個簡單的網路客戶端,不斷從伺服器接收資料,並將接收到的位元組序列解碼成可讀的文字,然後輸出到螢幕上。

  • 使用 urllib 讀取網頁:
    -程式碼:
    https://ithelp.ithome.com.tw/upload/images/20240928/20168364PaesjJ6r6U.png
    -程式碼說明:
    1.第一行,導入模組:
    ◆ urllib.request: 用來開啟網路 URL 並讀取資料。
    ◆ urllib.parse: 用於解析 URL。
    ◆ urllib.error: 用於處理網路請求時可能發生的錯誤。
    2.第二行,開啟網頁:
    ◆ urlopen() 函式會打開指定的 URL,並返回一個類似檔案物件的 fhand。這個物件讓我們可以像讀取本地檔案一樣,逐行讀取網頁的內容。
    3.第三、四行,逐行讀取並印出:
    ◆ for line in fhand::這個迴圈會逐行讀取 fhand 中的內容,每次迭代 line 變數會指向當前行。
    ◆line.decode().strip():
    ■ decode():由於網路上的資料通常是以位元組的形式傳輸,所以我們需要將它解碼成字串才能處理。這裡默認使用 UTF-8 編碼。
    ■ strip():移除字串前後的空白字符,包括空格、換行符等。
    ■ print():將處理後的字串輸出到終端。
    -程式碼總結:就像是用 Python 寫了一個簡單的瀏覽器,讓我們可以從網路上抓取文本資料,並將其顯示出來。

  • 什麼是網路爬蟲(Web Scraping):
    -是一種透過程式或腳本,模擬瀏覽器的行為,從網頁上擷取資料的技術。這個過程就像是有一個程式在網路上四處爬行,尋找並收集所需的資訊。

  • 為什麼要進行網路爬蟲?:
    -提取數據: 特別是社交媒體的數據,例如誰關注了誰。
    -取回自己的數據: 從無法直接匯出的系統中提取數據。
    -監控網站更新: 追蹤網站的最新資訊。
    -為搜尋引擎建構資料庫: 建立網站索引,方便搜尋。

  • 輕鬆從網頁中提取資料-Beautiful Soup:
    -Beautiful Soup是一個Python的第三方庫,專門用於解析HTML和XML文檔。
    -它提供了一套簡單易用的API,可以快速地從網頁中提取出需要的資料。相較於手動搜尋字串,Beautiful Soup更加高效、可靠。

以上圖片皆出自於Coursera上的課程「Python for Everybody」來自University of Michigan。


上一篇
Day13. Networks and Sockets
下一篇
Day15. 網路服務和XML(Web Services and XML)
系列文
Python學習馬拉松:30天挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言