iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
Software Development

Python 爬蟲這樣學,一定是大拇指拉!系列 第 7

[Python 爬蟲這樣學,一定是大拇指拉!] DAY07 - URL / URN / URI (3)

URI 之 URL 語法

  • URL 語法圖:

    https://ithelp.ithome.com.tw/upload/images/20210921/20139358gUfilXfH8U.png
    圖片來源

    根據圖片,我們可以知道所謂的 URL ,是由 scheme、userinfo、host、port、path、query 及 fragment 組成,我們將這些元素,分成以下五個類別:

    scheme:[//authority]path[?query][#fragment]
    
    1. scheme: 傳送協定,例如:http、https、ftp、mailto、file、data 等,更多協定可至這邊參考。以捷運站舉例,這邊是敘述你用什麼方法到這捷運站。
    2. authority(optional): 存取資源需要的憑證資訊,在 URI 語法中此部分是可省略的。
      • 語法為:
        [userinfo@]host[:port]
        
      • userinfo(optional): 就是使用者名稱及密碼,格式為以下。以捷運站舉例,這個捷運站普通人不能隨便進去,你進去前要先驗明身分。
        username:password
        
      • host: 資源點的 Domain name 或是 IP address。以捷運站舉例,捷運站名就是 Domain name,捷運站地址就是 IP address。
      • port(optional): 當要訪問某個資源點時,必須通過這個 port 來存取,若是走預設值,則可省略不寫。像是我們的瀏覽器就沒有顯示 port,因為是走預設的 80 (http)或 443 port(https)。以捷運站舉例,port 就像是捷運站的出入口一樣。
      • 用法: 比方說我們要存取某個不公開的 ftp server,存取該資源需要輸入憑證資訊
        ftp://iThome:123@192.168.0.100:21/
        
    3. path: 路徑(以「/」字元區別路徑中的每一個目錄名稱)。
    4. query(optional): 查詢(以「?」字元為起點,每個參數以「&」隔開,再以「=」分開參數名稱與資料,通常以UTF-8的URL編碼,避開字元衝突的問題)。簡單講,就是傳遞參數。
      • 例如:
        https://www.example.com/user?name=example
        
    5. fragment(optional): 導向的錨點,例如:將網頁的畫面導向至指定的錨點位置。

HTTP / HTTPS 的 URL

對 URL 語法有了解之後,這邊將以 HTTP / HTTPS 協定的 URL 為範例,這部份則是爬蟲最常用到的。

  • 我們用 iThome 來做說明:

    https://www.ithome.com.tw/
    
    • https 傳輸協定。
    • www.ithome.com.tw 為 authority 範圍中的 domain name,其餘被省略。
    • port 實際為 443,但因為是走預設值所以在這邊被省略。
    • path 則為 "/",root 的意思。

目前我們對 URI 家族有基本上的了解了,剛剛有提到,當我們要訪問一個服務時,必須通過 port 來存取資源,那這個 port 的定義是什麼?HTTP 傳輸協定,又是什麼呢?後續將一一來介紹,這些可是在規劃爬蟲時,息息相關的知識喔!

本篇章"URL / URN / URI"系列參考資料

[1] Wiki - URL
[2] Wiki - 統一資源定位符
[3] Wiki - URN
[4] Wiki - URI
[5] MDN - Identifying resources on the Web


上一篇
[Python 爬蟲這樣學,一定是大拇指拉!] DAY06 - URL / URN / URI (2)
下一篇
[Python 爬蟲這樣學,一定是大拇指拉!] DAY08 - 關於 Port
系列文
Python 爬蟲這樣學,一定是大拇指拉!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言