---
# System prepended metadata

title: 爬蟲教學1_最原始的方式，學會看html檔
tags: [靜態爬蟲]

---

# 爬蟲教學1_最原始的方式，學會看html檔
這次的教學會用到兩個套件
>1. request
>2. bs4

請安裝這兩個套件

bs4套件中有一個物件叫做beautifulsoup，它可以幫我們解析html網頁資訊

如果你不知道html是什麼的話，它是一種網頁的原始碼。

它將資料一層一層像裝袋子一樣裝起來，beautifulsoup可以幫我們尋找袋子並打開找到我們要的資料

我們今天就來示範爬取一下舊校網的資料

```python
!pip install requests
!pip install bs4
```

在讀取網頁的時候很容易會因為編碼不同而抓下來的資料變成亂碼，這時候就要透過requests所提供的encoding的方法來將字串解碼

可以打開chrome的時候按下"F12"然後選主控台(console)查詢document.charset指令來得到網頁的編碼類型編碼類型
![](https://i.imgur.com/wDAS1dF.png)


打開Devtools(F12)的時候，可以用左上角的按鈕點選網頁的物件會讓程式碼直接找到那個位置

```python=
import requests #導入request套件

url = 'http://www.clvsc.tyc.edu.tw/files/11-1000-2207.php' #決定要爬的網頁
htmlpage = requests.get(url) #取得網頁資訊
htmlpage.encoding = 'UTF-8' #解析網頁編碼
print(htmlpage.text) #將網頁的整個html檔轉換成文字print出來
```
接下來，我們要使用bs4套件來將資料解析出來

首先你可以按"F12"查看元素(Elements)查看網頁的原始碼並找到包裹資料的規律性，當然你也可以去看看網路上有關html語法的知識讓等一下理解的速度更加快速。

在校網中我們可以發現要抓取的訊息標題裡都是span裡的a的文字 所以我們要先找到span在抓裡面的a

當然我們不可能所有的span都要抓，我們只要抓span裡class屬性是ptname的就好了，否則很容易抓到額外的資料
![](https://i.imgur.com/56uV45n.png)
![](https://i.imgur.com/01HBaD3.png)
打開Devtools(F12)的時候，可以用左上角的按鈕點選網頁的物件會讓程式碼直接找到那個位置

import requests #導入request套件
from bs4 import BeautifulSoup #從bs4套件中導入BeautifulSoup物件
```python=
url = 'http://www.clvsc.tyc.edu.tw/files/11-1000-2207.php' #決定要爬的網頁
htmlpage = requests.get(url) #取得網頁資訊
htmlpage.encoding = 'UTF-8' #解析網頁編碼
htmlpage = BeautifulSoup(htmlpage.text) #轉換資料為BeautifulSoup物件的格式方便等一下查詢
tag = htmlpage.find_all('span',{'class','ptname'}) #找到網頁裡的html裡的span並且利用屬性篩選
for i in tag:
    print(i)
```
透過上述方法我們已經把span的區塊一個一個取出來並變成一個清單(list)

現在我們要把span裡的文字或是連結給抓出來。
```python=
import requests #導入request套件
from bs4 import BeautifulSoup #從bs4套件中導入BeautifulSoup物件

url = 'http://www.clvsc.tyc.edu.tw/files/11-1000-2207.php' #決定要爬的網頁
htmlpage = requests.get(url) #取得網頁資訊
htmlpage.encoding = 'UTF-8' #解析網頁編碼
htmlpage = BeautifulSoup(htmlpage.text) #轉換資料為BeautifulSoup物件的格式方便等一下查詢
tag = htmlpage.find_all('span',{'class','ptname'}) #找到網頁裡的html裡的span並且利用屬性篩選
for i in tag:
    a = i.find('a') #找到span區塊裡的a
    print(a.text) #查詢a區塊裡的文字
    print(a.get('href')) #查詢a區塊裡的超連結
```
這樣就成功抓取到我們要的資料了~

當然，有些網站為了資安的關係會有一個反機器人的機制又或著是某些瀏覽器瀏覽網頁效果較佳，所以我們有時候在requests.get()的時候需要假裝我們自己是瀏覽器，做法如下。(當然沒有需要的話就不用放)
```python=
import requests
url = 'http://www.clvsc.tyc.edu.tw/files/11-1000-2207.php' #決定要爬的網頁
# headers = {
#     {'User-Agent': 'python-requests/2.25.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
# }#預設
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
}#假裝成chrome
htmlpage = requests.get(url,headers=headers) #取得網頁資訊
```
當然，你也可以偽裝成其他瀏覽器，如果要讓程式自己抓最新的瀏覽器版本可以直接用下面的套件
```python=
!pip install fake_useragent
```
以下是各個最新版瀏覽器的查詢方式
```python=
import fake_useragent
ua = fake_useragent.UserAgent()
print(ua.google)
print(ua.ie)
print(ua.edge)
print(ua.safari)
print(ua.firefox)
```

下一篇:https://hackmd.io/@real7660/rydue8X_c