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>標籤")
點開你所使用的檔案位址,就可以順利儲存囉
這個爬蟲對於不論股市分析實時掌握價格非常有幫助,不過要特別留意網站的相關規範喔~