## 爬取成大網站上的資訊
首先我先用成大網站上的小標題來做嘗試,可以看到成大網站的小標題可能不只一個,我想把它們全部印出來。

較便捷的方法是直接匡列想要的元素,再按下「檢查」,這樣就可以快速地找到該元素的那段程式碼的位置。

```
import requests
from bs4 import BeautifulSoup
# 目標網站的URL
url = "https://www.ncku.edu.tw/" #成大網站的網址
# 發送HTTP GET請求並取得頁面內容
response = requests.get(url)
# 檢查請求是否成功
if response.status_code == 200:
# 將網頁內容解析為Beautiful Soup物件
soup = BeautifulSoup(response.text, 'html.parser')
# 尋找指定標記
target_tag = soup.find_all('h2', class_='mt-title') #找到所有前綴為<h2 class="mt-title">的元素,記得class要多一個引線!!
if target_tag:
for tag in target_tag:
# 提取每個標記的內容
content = tag.text
print(content)
else:
print("找不到指定的標記。")
else:
print("無法取得網頁內容。")
```
執行結果為
```
故事.觀點
成大快訊
近期活動
```
接著可以試試看再爬其他更細更深入的東西:每個標題內包含的文字內容

可以透過一層層往裡面找的方式,準確地提取出想要的資料。

import requests
from bs4 import BeautifulSoup
# 目標網站的URL
url = "https://www.ncku.edu.tw/"
# 發送HTTP GET請求並取得頁面內容
response = requests.get(url)
# 檢查請求是否成功
if response.status_code == 200:
# 將網頁內容解析為Beautiful Soup物件
soup = BeautifulSoup(response.text, 'html.parser')
element1 = soup.find_all('div', class_='mouter') #先找大部分:都包在mouter裡面
此時"mouter"(有兩個)裡面各自包含了"故事觀點"、"成大快訊",而我只要"成大快訊"的部分,因此可以再提取一個子元素,用if比對是不是我要的。
for element in element1:
t = element.find('h2', class_='mt-title')
if t and t.text == '成大快訊': #再細找成大快訊的部份
elements_2 = element.find_all('div', class_='d-item v-it col-sm-3')
for e in elements_2:
print(e.text.strip())
else:
print("無法取得網頁內容。")
執行結果
```
成大 92 校慶校園定向越野賽 競速中增添輕鬆及藝文氣息
【92 校慶】2023 成材產業論壇 關心人類生存大環境 聚焦綠能科技與新經濟
【92 校慶】第三屆成電論壇 重量級校友、系友探討生成式 AI 發展趨勢
成大創新圓夢計畫Demo Day 展現校園新創潛能無限
成大醫學院喜迎 40 週年 發表《蔚然成風:成大醫學院 40 週年誌》專書
「臺南 400」演唱會 感受府城 400 年文化底蘊的活力與魅力
快來成大玩科學! 一年一度的「成大理學大道科學博覽會」又來囉
台日半導體人才合作三贏方案 成大半導體學院與日本熊本高專締約合作意向書
```
那如果我要打包的不是文字,而是其他元素該怎麼辦?

試著抓看看圖片
import requests
from bs4 import BeautifulSoup
ncku_url = 'https://www.ncku.edu.tw/' #目標網址
response = requests.get(ncku_url) #發送HTTP請求,獲取網頁內容
if response.status_code == 200: # 檢查是否成功獲取網頁內容
# 使用Beautiful Soup解析網頁內容
soup = BeautifulSoup(response.text, 'html.parser')
前半部跟之前基本上都一樣。

不過要注意的是,存圖片的網址是由字典的形式被包起來的!!

若要提取該圖片的連結,就要用從字典裡提出該index value的方法:
elements_1 = soup.find_all('div', class_='mouter') #找到一個最外層容器
for element in elements_1:
t = element.find('h2', class_='mt-title')
if t and t.text == '故事.觀點':
elements_2 = element.find_all('div', class_='d-item v-it col-sm-3')
for e in elements_2:
dimg = e.find('div', class_='d-img')
img = dimg.find('img')
imgurl =img['src']
else:
print('無法獲取網頁內容')
得到結果為:

但這不是一個完整的網址,只是網址的後半部分,前面要再加上成大的主網址
imgurl=ncku_url+img["src"]
最終結果為:
https://www.ncku.edu.tw//var/file/0/1000/pictures/146/m/mczh-tw1920x800_small260476_841382501212.jpg
https://www.ncku.edu.tw//var/file/0/1000/pictures/706/m/mczh-tw1920x800_small260230_176050744046.jpg
https://www.ncku.edu.tw//var/file/0/1000/pictures/706/m/mczh-tw1920x800_small260230_176050744046.jpg
https://www.ncku.edu.tw//var/file/0/1000/pictures/706/m/mczh-tw1920x800_small260230_176050744046.jpg
完整code:
```
import requests
from bs4 import BeautifulSoup
ncku_url = 'https://www.ncku.edu.tw/' #目標網址
response = requests.get(ncku_url) #發送HTTP請求,獲取網頁內容
if response.status_code == 200: # 檢查是否成功獲取網頁內容
soup = BeautifulSoup(response.text, 'html.parser')# 使用Beautiful Soup解析網頁內容
elements_1 = soup.find_all('div', class_='mouter') #找到一個最外層容器
for element in elements_1:
t = element.find('h2', class_='mt-title')
if t and t.text == '故事.觀點':
elements_2 = element.find_all('div', class_='d-item v-it col-sm-3')
for e in elements_2:
dimg = e.find('div', class_='d-img')
img = dimg.find('img')
imgurl =ncku_url+img['src']
print(imgurl)
else:
print('無法獲取網頁內容')
```