2024年5月28日 星期二

分享用Python的beautifulsoup4來抓取大樂透表格資料

分享用Python的beautifulsoup4來抓取大樂透表格資料

相關課程:ChatGPT輔助EXCEL VBA網路爬蟲與圖表繪製班
https://ojt.wda.gov.tw/ClassSearch/Detail?OCID=157308&plantype=1

這篇分享文,主要可以和 [分享QueryTables物件改用IE物件來抓取大樂透表格資料]比較,

一個是用EXCEL VBA的IE物件,一個是用Python的beautifulsoup4來擷取資料,

兩相比對,沒有各有所長,但若是存為EXCEL,那當然直接用VBA是最直接

若是便利性和後續程式擴充的支援,當然還是Python較有優勢。

 今天主要是學習利用beautifulsoup的find與find_all方法,以解析HTML的標籤與class,

find是取一個或第一個標籤資料,取得的資料型態為文字,

而find_all方法,是取得多個標籤資料,資料型態為串列型態。

練習下載大樂特歷史資料,先找到table標籤,

再取得tr與td標籤,很快地就可以取得所有資料,

其他的就是去除換行與空白,可以用replace方法即可解決問題。

完整教學

範例一:大樂特歷史資料下載

網址:https://www.lotto-8.com/listltobigbbk.asp?indexpage=1&orderby=new

**可先藉由 html-online分析

https://html-online.com/editor/

完整程式碼:

import requests

from bs4 import BeautifulSoup

url = "https://www.lotto-8.com/listltobigbbk.asp?indexpage=1&orderby=new"

html = requests.get(url)

html.encoding="utf-8"

sp = BeautifulSoup(html.text, "html.parser")

tbl = sp.find("table","auto-style4")

list_tr = tbl.find_all("tr")

for i in range(len(list_tr)):

    list_td=list_tr[i].find_all("td")

    print(list_td[0].text+","+list_td[1].text.replace("\xa0","")+","+list_td[2].text)

**日期改為標準格式 年/月/日

list_td[i].text[0:4]+"/"+list_td[i].text[4:9]

將下載資料存成EXCEL

import requests

from openpyxl import Workbook

wb = Workbook()

sheet = wb.active

from bs4 import BeautifulSoup

url = "https://www.lotto-8.com/listltobigbbk.asp?indexpage=1&orderby=new"

html = requests.get(url)

html.encoding="utf-8"

sp = BeautifulSoup(html.text, "html.parser")

tbl=sp.find("table","auto-style4")

# print(tbl.text)

list_tr=tbl.find_all("tr")

for i in range(0,len(list_tr)):

    list_td=list_tr[i].find_all("td")

    S=list_td[0].text+","+list_td[1].text.replace("\xa0","")+","+list_td[2].text

    list1=S.split(",")

    print(list1)

    sheet.append(list1

wb.save("E:\\大樂透.xlsx")


開課資訊公布在FB或是部落格:

https://www.facebook.com/scuexcelvba/


教學論壇(之後課程會放論壇上課學員請自行加入):

https://groups.google.com/g/tcfst_python_2024


課程簡介:

單元01_建置Python開發環境與程式測試

單元02_基本語法與結構控制件

單元03_迴圈資料結構與自訂函數

單元04_串列、字典與檔案與資料庫處理

單元05-1_ChatGPT+Excel自動化程式設計基礎

單元05-2_ChatGPT+Python自動化程式設計基礎

單元05-3_ChatGPT協助撰寫Excel與Python程式

單元05-4_開放資料處理CSV和JSON資料處理

單元05-5_Python網頁資料擷取基礎

單元05-6_網頁資料擷取台彩與股市資料

單元06_使用Pandas與處理_Excel_試算表

單元07_用Python操作Excel儲存格、欄列與工作表

單元08_用Python操作Excel樞紐分析表與折線圖表


吳老師  113/5/24

懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524


其他相關學習:


ChatGPT,EXCEL,VBA,Python,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境

2024年5月26日 星期日

分享QueryTables物件改用IE物件來抓取大樂透表格資料

分享QueryTables物件改用IE物件來抓取大樂透表格資料

相關課程:ChatGPT輔助EXCEL VBA網路爬蟲與圖表繪製班
https://ojt.wda.gov.tw/ClassSearch/Detail?OCID=157308&plantype=1

為什麼不直接用之前講過的QueryTables物件來抓取表格資料,

而需要改用IE物件來抓取表格資料呢?

主要至少有幾個地方QueryTables物件,

1.如果表格內的標籤不是td,而是有th。

2.目前QueryTables物件只支援Big5的網頁編碼,但目前主流慢慢是utf-8編碼。

但若是改為IE物件的限制就是只能在Windows平台,

MAC除非有安裝Edge瀏覽器,否則會有問題。

學生常問,IE不是已經升級為Edge了嗎?事實上,

用IE物件依舊相容於Edge瀏覽器,所以呼叫IE物件依舊沒問題。

所以,本周課程主要先練習將大樂透網頁改為IE物件擷取資料,

再改為擷取交通部的統計查詢網,

交通部的統計查詢網的表格標籤除了有td標籤,

還有th標籤,不能用QueryTables物件來抓取表格資料,

必須改用IE物件來擷取資料。


完成畫面:


完整的教學影片:


吳老師excel函數Vba與Python大數據教學:

教學論壇:
台師大試算表進階應用與程式設計2021

課程理念:
1.以循序漸進的方式, 透過詳細的說明和實用的50個Excel VBA範例,
帶領您輕鬆進入 Excel VBA 設計的領域, 並逐步了解整個 VBA 的架構與輪廓,進而學習 VBA 變數、常數、函式及邏輯的觀念, 即使沒有任何程式設計基礎,也能自己親手撰寫 VBA 程序來提昇工作效率, 晉身職場 Excel 高手!
2.進而解說EXCEL與資料庫的結合,甚至將EXCEL當成資料庫來使用,
結合函數、VBA等更深入的功能,讓資料處理和分析的應用更上層樓。

五大類函數與自訂函數
一、文字和資料函數
二、邏輯函數
三、日期和時間函數
四、數學和三角函數
五、檢視和參照函數

上課用書:
Excel VBA一點都不難:一鍵搞定所有報表
超圖解 Excel VBA 基礎講座

吳老師  113/5/24

吳老師excel函數Vba與Python大數據教學:

教學論壇:
台師大試算表進階應用與程式設計2021

懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524

其他相關學習: