# 2024.5.26 上課講義 ## Matplotlib [**官方資料**](https://matplotlib.org/stable/index.html) 掛接雲端硬碟 ```python= from google.colab import drive drive.mount('/content/drive') ``` 引入所需套件 ```python= import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '字型路徑') ``` ### 關係圖 Plotting #### 設定x、y軸的點 ```python= x_point = np.array([1, 5]) y_point = np.array([4, 10]) ``` #### 設定繪圖 ```python= plt.plot(x_point, y_point) plt.show() ``` :::spoiler 全部程式碼 ```python= import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') x_point = np.array([1, 5]) y_point = np.array([4, 10]) plt.plot(x_point, y_point) plt.show() ``` ::: ![image](https://hackmd.io/_uploads/rJKVdEbfR.png) #### 加上一些設定、標題、標籤 ```python= # 設定繪圖區大小 plt.figure(figsize = (12, 6)) # 繪圖區的標題 plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20) # 設定橫軸和縱軸的標題 plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20) plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20) # 函數標籤 plt.plot(x_point, y_point, label = "標籤") # 顯示標籤 plt.legend(prop = twfont1) ``` >fontproperties 是用來設定字型, twfont1 是前面所設定的字型名稱(可改) >fontsize 是用來設定字體的大小 >`plt.legend()` 可以取代 `plt.show()` :::spoiler 全部程式碼 ```python= # 加入說明 import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (5, 5)) plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20) plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20) plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20) x_point = np.array([1, 5]) y_point = np.array([4, 10]) plt.plot(x_point, y_point, label = "標籤") plt.legend(prop = twfont1) ``` ::: ![image](https://hackmd.io/_uploads/By8HyrWG0.png) #### 描點、無線 ```python= # 無線 plt.plot(x_point, y_point, 'o', label = "標籤") ``` :::spoiler 全部程式碼 ```python= # 無線 import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (5, 5)) plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20) plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20) plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20) x_point = np.array([1, 5]) y_point = np.array([4, 10]) plt.plot(x_point, y_point, 'o', label = "標籤") plt.legend(prop = twfont1) ``` ::: ![image](https://hackmd.io/_uploads/r1JaJrZzC.png) ```python= # 描點 plt.plot(x_point, y_point, marker='o', label = "標籤") ``` :::spoiler 全部程式碼 ```python= # 描點 import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (5, 5)) plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20) plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20) plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20) x_point = np.array([1, 5]) y_point = np.array([4, 10]) plt.plot(x_point, y_point, marker='o', label = "標籤") plt.legend(prop = twfont1) ``` ::: ![image](https://hackmd.io/_uploads/rkK01Bbf0.png) :::info **練習** 請利用剛剛教的內容,畫出一個 $y = sinx$ 的圖形 ```python= import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '字型路徑') plt.figure(figsize = (5, 5)) plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20) plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20) plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20) # 把 x, y 的點改成 sin 圖形 ______ plt.plot(x_point, y_point, label = "標籤") plt.legend(prop = twfont1) ``` ```python= import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (8, 5)) plt.title("y = sinx", fontproperties = twfont1, fontsize = 20) plt.xlabel("x", fontproperties = twfont1, fontsize = 20) plt.ylabel("y", fontproperties = twfont1, fontsize = 20) # 把 x, y 的點改成 sin 圖形 x_point = np.linspace(-2*np.pi, 2*np.pi, 100) y_point = np.sin(x_point) plt.plot(x_point, y_point, label = "sin") plt.legend(prop = twfont1) ``` ![image](https://hackmd.io/_uploads/By3XgfxE0.png) ::: #### 改變顏色、線條、符號 順序是顏色、線條、符號,不用間隔直接加在資料後面 ```python= plt.plot(x_point, y_point, "r--+", marker='o', label = "標籤") ``` :::spoiler 全部程式碼 ```python= import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (5, 5)) plt.title("標題說明文字", fontproperties = twfont1, fontsize = 20) plt.xlabel("x軸標題文字", fontproperties = twfont1, fontsize = 20) plt.ylabel("y軸標題文字", fontproperties = twfont1, fontsize = 20) x_point = np.array([1, 5]) y_point = np.array([4, 10]) plt.plot(x_point, y_point, "r--+", marker='o', label = "標籤") plt.legend(prop = twfont1) ``` ::: ![image](https://hackmd.io/_uploads/BkmrWHbzA.png) [**其他顏色、線條、符號**](https://www.w3schools.com/python/matplotlib_markers.asp) [**更多跟線有關的參數**](https://www.w3schools.com/python/matplotlib_line.asp) :::info **練習** 請大家畫一個 $f1: y = (x-\frac{1}{5})^2 + 2$ 和一個 $f2: y = -x^3 + 2$ 的圖形,條件如下: 1. 圖的大小是 $8 * 8$ 2. 標題是 **二次函數** 字體大小為 15 4. x是在-2~2之間平均取20個點(上次有教) 5. 要畫線+描點 6. f1的顏色為 #005AB5 ;f2的顏色為 #3D7878 7. 要有圖例標示 8. 其餘的自訂 ```python= # 載入套件、模組 import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '字型路徑') # 定義出指定函式 def f1(x): return __f1__ def f2(x): return __f2__ # 設定座標點 x_point = _____ y_point1 = __f1_y__ y_point2 = __f2_y__ # 定義圖片大小、標題 plt.figure(figsize = (___, ___)) plt.title("___", fontproperties = twfont1, fontsize = ___) plt.xlabel("x軸", fontproperties = twfont1, fontsize = ___) plt.ylabel("y軸", fontproperties = twfont1, fontsize = ___) # 畫出來 plt.plot(___f1___) plt.plot(___f2___) plt.legend(prop = twfont1) ``` ```python= # 載入套件、模組 import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') # 定義出指定函式 def f1(x): return (x-0.2)**2+2 def f2(x): return -x**3+2 # 設定座標點 x_point = np.linspace(-2, 2, 20) y_point1 = f1(x_point) y_point2 = f2(x_point) # 定義圖片大小、標題 plt.figure(figsize = (8, 8)) plt.title("二次函數", fontproperties = twfont1, fontsize = 15) plt.xlabel("x軸", fontproperties = twfont1, fontsize = 8) plt.ylabel("y軸", fontproperties = twfont1, fontsize = 8) # 畫出來 plt.plot(x_point, y_point1, c = "#005AB5", linewidth = 2, marker='o', ms = 5, label = "f1") plt.plot(x_point, y_point2, linestyle = "dotted", c = "#3D7878", linewidth = 2, marker='s', ms = 5, label = "f2") plt.legend(prop = twfont1) ``` ![image](https://hackmd.io/_uploads/ryqGUzxNR.png) ::: ### 散佈圖 Scatter ```python= import numpy as np import random as rd import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (5, 5)) plt.title("散佈圖", fontproperties = twfont1, fontsize = 20) x_point = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6]) y_point = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86]) # 散佈圖用scatter plt.scatter(x_point, y_point, c = "#7373B9") # 沒有圖例,用plt.show() plt.show() ``` ![image](https://hackmd.io/_uploads/r1POz8-GC.png) :::warning **顏色可以用漸層的** [cmps](https://matplotlib.org/stable/users/explain/colors/colormaps.html) ```python= import numpy as np import random as rd import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (5, 5)) plt.title("散佈圖", fontproperties = twfont1, fontsize = 20) x_point = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6]) y_point = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86]) colors = np.linspace(0, 100, 13) plt.scatter(x_point, y_point, c = colors, cmap = "Blues") # 顯示colorbar plt.colorbar() plt.show() ``` ![image](https://hackmd.io/_uploads/Sy9hGIZfC.png) ::: :::warning **補充** 匯入檔案 >[**2-22 grade連結**](https://drive.google.com/file/d/1FlvETq3yinKiEv0UF4fmCias1NySX5RW/view?usp=drive_link)(也有放在資料夾裡) >第一行是座號;第二行是成績 ```python= data = np.loadtxt("/content/drive/MyDrive/資研/雄資/教學/20240526/2-22 grade.csv",delimiter=",") print(data.shape) ``` 調整檔案 ```python= data_T = data.T ``` 畫出散佈圖 ```python= import numpy as np import random as rd import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (8, 5)) plt.title("二年二十二班成績散佈圖", fontproperties = twfont1, fontsize = 20) plt.xlabel("座號", fontproperties = twfont1, fontsize = 12) plt.ylabel("成績", fontproperties = twfont1, fontsize = 12) x_point = data_T[0] y_point = data_T[1] plt.scatter(x_point, y_point) plt.show() ``` ![image](https://hackmd.io/_uploads/r1aWanB7A.png) 加上班平均的標準線 ```python= import numpy as np import random as rd import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (8, 5)) plt.title("二年二十二班成績散佈圖", fontproperties = twfont1, fontsize = 20) plt.xlabel("座號", fontproperties = twfont1, fontsize = 12) plt.ylabel("成績", fontproperties = twfont1, fontsize = 12) # 計算班平均 s = 0 for i in data_T[1]: s += i standard = s//40 x_point = data_T[0] y_point = data_T[1] # 設定點 x_point1 = [0, 40] y_point1 = [standard]*2 plt.scatter(x_point, y_point) # 畫出班平均的線 plt.plot(x_point1, y_point1, 'r', label = "班平均") plt.legend(prop = twfont1) ``` ![image](https://hackmd.io/_uploads/BJYlpnHQC.png) ::: ### 長條圖 Bars ```python= import numpy as np import random as rd import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (10, 5)) plt.title("長條圖", fontproperties = twfont1, fontsize = 20) plt.xlabel("座號", fontproperties = twfont1, fontsize = 10) plt.ylabel("作業完成度", fontproperties = twfont1, fontsize = 10) # 取得 array = 1~38 x_point = np.arange(1, 39) # 取得 array = 1~100 Y = list(np.arange(0, 100)) # 隨機取 38個1~100之間 的數字做為 1~38號的完成狀況 y_point = rd.sample(Y, 38) # 長條圖用bar plt.bar(x_point, y_point) plt.show() ``` ![image](https://hackmd.io/_uploads/rJosHIZfC.png) :::warning **補充** 使用 `plt.barh()` 可以繪製橫向的長條圖 ```python= import numpy as np import random as rd import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (5, 10)) plt.title("長條圖", fontproperties = twfont1, fontsize = 20) plt.xlabel("座號", fontproperties = twfont1, fontsize = 10) plt.ylabel("作業完成度", fontproperties = twfont1, fontsize = 10) # 取得 array = 1~38 x_point = np.arange(1, 39) # 取得 array = 1~100 Y = list(np.arange(1, 101)) # 隨機取 38個1~100之間 的數字做為 1~38號的完成狀況 y_point = rd.sample(Y, 38) # 長條圖用bar plt.barh(x_point, y_point) plt.show() ``` ![image](https://hackmd.io/_uploads/H1eLpGgVC.png) ::: :::info **練習** 請利用以下檔案,先將作業完成度轉換成完成百分比,並畫出長條圖 >[**2-22 homework連結**](https://drive.google.com/file/d/1zi9dw0euNINONgm0t-Fqlt17DyCMcWlU/view?usp=drive_link)(也有放在資料夾裡) >第一行是座號;第二行是完成作業數(共17項作業) 匯入檔案 ```python= data = np.loadtxt("/content/drive/MyDrive/資研/雄資/教學/20240526/2-22 homework.csv",delimiter=",") data_T = data.T ``` 把完成件數轉成百分比 ```python= finish = data_T[1] percentage = finish/17*100 ``` 引入套件 + 設定圖片 ```python= import numpy as np import random as rd import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (10, 5)) plt.title("長條圖", fontproperties = twfont1, fontsize = 20) plt.xlabel("座號", fontproperties = twfont1, fontsize = 10) plt.ylabel("作業完成度", fontproperties = twfont1, fontsize = 10) ``` 繪圖 ```python= x_point = data_T[0] y_point = percentage plt.bar(x_point, y_point) plt.show() ``` ::: ### 直方圖 Histograms ```python= import numpy as np import random as rd import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (10, 5)) plt.title("長方圖", fontproperties = twfont1, fontsize = 20) D = list(np.arange(0, 100)) data = rd.sample(D, 20) # 直方圖用plt.hist(),bins = "auto"會自動決定組距 plt.hist(data, bins = 'auto') plt.show() ``` ![image](https://hackmd.io/_uploads/r1aawIWz0.png) ### 圓餅圖 Pie Charts ```python= import numpy as np import random as rd import matplotlib.pyplot as plt import matplotlib.font_manager as plt_font twfont1 = plt_font.FontProperties(fname = '/content/drive/MyDrive/資研/資料/msjh.ttc') plt.figure(figsize = (10, 5)) plt.title("圓餅圖", fontproperties = twfont1, fontsize = 20) data = np.array([35, 25, 25, 15]) # 設定各項數據名稱 L = ["freshman", "sophomore", "junior", "senior"] # 設定圓餅突出的距離 E = [0, 0.2, 0, 0] # 設定顏色 C = ["#C4E1FF", "#66B3FF", "#2894FF", "#004B97"] # 圓餅圖用plt.pie(),labels圖例,explode突出,colors顏色,shadow陰影 plt.pie(data, labels = L, explode = E, colors = C, shadow = True) # title標題,loc圖例位置 plt.legend(prop = twfont1, title = "Students", loc = "upper left") ``` ![image](https://hackmd.io/_uploads/SkpV3UWzR.png) --- ## 讀寫檔案 :::danger 注意!以下所有程式碼的檔案路徑都要記得修改成自己的檔案路徑 或是直接複製我的,但是另外加一行 ```python= f = '裡面放要存資料的資料夾路徑' ``` ::: 在 Python 檔案中,使用`\n`來辨別文章的分行 ``` 今天星期日。 今天的日期是5/26。 -2024.5.26 ``` 在檔案中,格式會是 ``` 今天星期日。\n今天的日期是5/26。\n-2024.5.26 ``` ### 開啟檔案 ```python= infile = open('檔案路徑', '代號') ``` | 代號 | 功能 | |:----:|:---------------------:| | r | read 讀取 | | w | write 撰寫(複寫) | | a | append 添加(在最後) | | x | create 建立 | >w、a 在檔案不存在的情況下會直接建立一個新的檔案 ### 關閉檔案 開啟檔案後要記得關閉就像瀏覽器要記得登出一樣,是一種好習慣 >沒有關閉會記憶體被佔據 ```python= infile.close() ``` ### 讀取檔案 | 名稱 | 功能 | |:---------:|:----------------------:| | read | 一次讀進全部的檔案 | | readline | 讀取第一行 | | readlines | 一行一行讀取全部的檔案 | 1. read ```python= infile = open(f+'text01.txt','r') content = infile.read() infile.close() ``` 加上指定大小(讀取指定字元數) ```python= infile = open(f+'text01.txt','r') content = infile.read(7) infile.close() ``` 2. readline ```python= infile = open(f+'text01.txt','r') content = infile.readline() infile.close() ``` 加上指定大小(讀取第一行的指定字元數) >超過字數還是只會讀取第一行 ```python= infile = open(f+'text01.txt','r') content = infile.readline(20) infile.close() ``` 3. readlines ```python= infile = open(f+'text01.txt','r') content = infile.readlines() infile.close() ``` 加上指定大小(讀取包含指定字元數的那幾行) ```python= infile = open(f+'text01.txt','r') content = infile.readlines(20) infile.close() ``` :::info **練習** 請讀取下列檔案的內容,並輸出成以下格式 ``` 寒蟬淒切。 對長亭晚,驟雨初歇。 都門帳飲無緒,留戀處,蘭舟催發。 執手相看淚眼,竟無語凝噎。 念去去、千里煙波,暮靄沈沈楚天闊。 多情自古傷離別。 更那堪、冷落清秋節。 今宵酒醒何處,楊柳岸、曉風殘月。 此去經年,應是良辰好景虛設。 便縱有、千種風情,更與何人說。 ``` >[**檔案連結**](https://drive.google.com/file/d/1-kaNLx9_iDO4_CplLsG56xMWHhUDuswx/view?usp=sharing) >可以先下載下來再傳上雲端 ```python= infile = open(f+'practice1.txt','r') content = infile.read() infile.close() for i in content: if i == '。': print('。') else: print(i, end='') ``` ::: 4. readable 回傳該檔案是否能進行讀取 ```python= infile1 = open(f+'text00.txt','r') infile2 = open(f+'text00.txt','w') print(infile1.readable()) print(infile2.readable()) infile1.close() infile2.close() ``` ### 撰寫檔案 :::danger 使用 write 會先 **清空原先的所有內容** 再寫入新的 ::: 1. write ```python= infile = open(f+'text02.txt','w') infile.write('今天星期天。') infile.close() ``` 2. writelines 會一行一行寫入 ```python= infile = open(f+'text03.txt','w') infile.writelines(['今天星期天。\n', 'Hello World\n', 'weee~\n']) infile.close() ``` 3. writable 回傳該檔案是否能進行撰寫 ```python= infile1 = open(f+'text00.txt','r') infile2 = open(f+'text00.txt','w') print(infile1.writable()) print(infile2.writable()) infile1.close() infile2.close() ``` ### 其他 1. 添加內容(不刪除原先內容) ```python= infile = open(f+'text04.txt','a') infile.write('新增的文字\n') infile.close() ``` 2. 撰寫檔案 使用 print 的 file 參數 ```python= infile = open(f+'text05.txt','w') print('ㄚㄚㄚㄚㄚㄚㄚㄚㄚ', file=infile) infile.close() ``` 3. tell 回傳指針位置 ```python= infile = open(f+'text01.txt','r') content = infile.read(10) t = infile.tell() infile.close() ``` 4. seek - 移動指針位置 - 函式:seek(a, b) >a 為偏移量, b 為起始位置 ```python= infile = open(f+'text01.txt','r') content1 = infile.read(10) infile.seek(0, 0) content2 = infile.read(10) infile.close() ``` 5. with 會在執行動作結束後自行關閉檔案 ```python= with open(f+'text06.txt', 'w') as infile: infile.write('hello') ``` :::info **練習** 請寫程式建立一個檔案,並利用程式碼在檔案內撰寫文字(可以是這堂課的感想、建議或是什麼都行),上傳到資料夾 >[**資料夾連結**](https://drive.google.com/drive/folders/12JXvKVSa6xW3pC9d85UxaMFsP-YlR4VN?usp=sharing) >可以署名也可以不用 ::: --- ## 網路爬蟲 Web Crawler 1. 自動抓取網頁內容並分析、找到特定需要的資料 2. 流程:網頁的 URL -> 打開網址 & 存取內容 -> 分析、取得要的部分 3. 特色:省力、省時間,可以執行重複性高的工作 ### 引入套件 ```python= # Request 送出請求;urlopen 用來開啟連結 from urllib.request import Request, urlopen # 爬蟲的核心 from bs4 import BeautifulSoup ``` ### 進入網站 ```python= # 台大電機的教授名單 url = 'https://web.ee.ntu.edu.tw/teacher_index_all.php' # 傳送 request 給伺服器,相當於在搜尋欄打上網址 req = Request(url) # urlopen 開啟連結內容 利用 read 讀進變數 decode 是把 bytes 轉成 string html = urlopen(req).read().decode() # 利用 BeautifulSoup 去解析成 html 檔案 bsObj = BeautifulSoup(html, "html.parser") ``` :::warning 如果網站有擋爬蟲的機制會出現 Error 可以利用以下程式偽裝成瀏覽器 ```python= req = Request(url, headers={ 'User-Agent': 'Mozilla/5.0 (Macintosh;Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/35.0.1916.47 Safari/537.36' } ) ``` >User-Agent 可以按 F12 後找到 Network conditions > >按 F12 後找到叉叉旁邊的三個點 >![image](https://hackmd.io/_uploads/r11WWtJNC.png) > >點開選 More tools 裡的 Network conditions >![image](https://hackmd.io/_uploads/HkINWKJ40.png) > >取消勾選 User browser default 就可以在 Custom... 裡選喜歡的 User-Agent >![image](https://hackmd.io/_uploads/rJQrWty40.png) ::: ### 取得特定內容 >按 F12 可以看到網頁原始碼 1. find 會找到該標籤下第一次出現的內容 ```python= bsObj.find('tag') ``` 2. get_text 利用 get_text 擷取文字內容 ```python= bsObj.find('tag').get_text() ``` 如果是 class 就利用 `{}` ```python= bsObj.find('tag', {'class':'class name'}) ``` 3. find_all 會找到所有該標籤下的內容,並包裝成 list ```python= bsObj.find_all('tag') ``` >可以利用 for-loop 一一取出 :::info **練習** 請撰寫一個程式列出所有教授的名字、email、職稱、研究專業 ``` e.g. 戴邇立 thierryblu@ntu.edu.tw 專任教授 通訊與信號處理 張子璿 tchang9@ntu.edu.tw 副教授 奈米電子 張耀文 ywchang@ntu.edu.tw 特聘教授 計算機,電子設計自動化 陳政維 cwchenee@ntu.edu.tw 副教授 自動控制 陳景然 chenjim@ntu.edu.tw 專任教授 積體電路與系統,電力系統與電力電子組 陳中平 cpchen@ntu.edu.tw 專任教授 電子設計自動化,醫工 . . . 葉丙成 pcyeh@ntu.edu.tw 專任教授 計算機,通訊與信號處理,資料科學與智慧網路 顏嗣鈞 hcyen@ntu.edu.tw 特聘教授 計算機 于天立 tianliyu@ntu.edu.tw 副教授 計算機 ``` ```python= ``` :::