Python爬蟲 入門 Beautiful Soup bs4詳細實務教學

cobweb, web, spider-4439844.jpg

beautiful soup是一種python爬蟲的模組,有別於Scrapy的爬蟲框架,你需要一點python的模組相關常識,不過其實也沒有多困難,一起跟著做也可以,首先我們就先來做模組的安裝

安裝Python Beautiful Soup模組

首先,使用cmd,按下windows圖示,搜尋cmd

點開按enter會出現一個小黑框,在框框中輸入下面的程式

pip install bs4

這樣一來就下載完成了

接著,進入你常用的IDE(整合開發環境),新增一個python文件,下面用vscode示範爬取此網站(https://kodointeraction.tech)的結果,等等我們再逐行講解程式

import requests
from bs4 import BeautifulSoup
url = 'https://kodointeraction.tech/'
web = requests.get(url)                        
soup = BeautifulSoup(web.text, "html.parser") 
print(soup.prettify(encoding='utf-8'))

輸出如下:

哦,看起來我的網站有防爬蟲,租這個虛擬主機架站錢是花的挺值得(誤
不過我們還是來逐行分析一下程式

1.首先import requests,這行code是導入Python的requests庫,用於發送HTTP請求,可以用來從網頁上獲取數據

2.接著from bs4 import BeautifulSoup,導入BeautifulSoup

3.url = 'https://kodointeraction.tech/':這行定義url為目標地址

4.web = requests.get(url):這行code使用requests庫的get函數向指定的URL發送一個GET請求,然後將獲取的響應存儲在web變量中。這樣就可以獲取網頁的原始內容

5.soup = BeautifulSoup(web.text, "html.parser"):這行代碼使用BeautifulSoup庫的BeautifulSoup類將獲取的網頁內容進行解析。web.text包含了網頁的原始文本,而"html.parser"告訴BeautifulSoup使用HTML解析器來解析這段文本

6.print(soup.prettify(encoding='utf-8')):這行代碼使用BeautifulSoup對網頁進行了格式化處理,然後將格式化後的內容打印到控制台上。prettify函數可以使HTML文本具有可讀性,encoding='utf-8'參數指定了輸出的編碼格式為UTF-8

好,這樣你應該知道這個程式做甚麼了,簡單來說,就是試圖讀取網站的原始文本
如果要爬其他網站就將url換成目標網站就好

例如我要爬取下面的網站
yahoo股市

首先我們要確定到底想要爬甚麼,因為我們通常只想要網頁的一部份內容
所以我們先進到網頁,按下F12,確定想要的文本位置

例如這裡,我想要這個表單中的成交、昨收…的數據,確認完在網站的哪裡後開始爬取

程式如下

import requests
from bs4 import BeautifulSoup

url = 'https://tw.stock.yahoo.com/quote/00687B.TWOS'
web = requests.get(url)
soup = BeautifulSoup(web.text, "html.parser")

# 找到包含特定文本的<ul>標籤
target_ul = soup.find('ul', class_='D(f) Fld(c) Flw(w) H(192px) Mx(-16px)')

# 如果找到了該<ul>標籤,則打印其文本內容
if target_ul:
    print(target_ul.get_text())
else:
    print("未找到指定的<ul>標籤")

輸出如下

看起來非常順利,我們得到了想要的數據,就在target_ul裡面

將爬蟲資料儲存至Excel

由於python的標準library中沒有可以直接操作excel的model,所以我們在這裡使用xlwt

照上面一樣打開命令提示字元cmd,接著輸入以下指令

pip install pandas

如果過程中,你發現就是莫名其妙少一些模組,請pip install就好了

import pandas as pd
import requests
from bs4 import BeautifulSoup

url = 'https://tw.stock.yahoo.com/quote/00687B.TWO'
web = requests.get(url)
soup = BeautifulSoup(web.text, "html.parser")

# 找到包含特定文本的<ul>標籤
target_ul = soup.find('ul', class_='D(f) Fld(c) Flw(w) H(192px) Mx(-16px)')

# 如果找到了該<ul>標籤,則將其文本內容轉換成 Pandas DataFrame
if target_ul:
    # 分割文本內容,並按照換行符號('\n')分割成列表
    content_list = target_ul.get_text().split('\n')
    
    # 去除空白元素
    content_list = [item.strip() for item in content_list if item.strip()]
    
    # 將列表轉換成 Pandas DataFrame
    df = pd.DataFrame({'Data': content_list})
    
    # 將 DataFrame 寫入 Excel 文件
    df.to_excel('yahoo_stock_data.xlsx', index=False)
    print("資料已成功存儲到 yahoo_stock_data.xlsx 中。")
else:
    print("未找到指定的<ul>標籤")

點開你所使用的檔案位址,就可以順利儲存囉

這個爬蟲對於不論股市分析實時掌握價格非常有幫助,不過要特別留意網站的相關規範喔~

Back to Blog

返回頂端