顯示具有 VBA 標籤的文章。 顯示所有文章
顯示具有 VBA 標籤的文章。 顯示所有文章

2024年6月4日 星期二

分享用ChatGPT產生Python網路爬蟲程式到底行不行

 分享用ChatGPT產生Python網路爬蟲程式到底行不行

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

繼之前那篇分享文:

[分享用ChatGPT產生網路爬蟲VBA程式超簡]

想來和大家分享用ChatGPT產生Python網路爬蟲程式到底行不行的問題,

首先,一般認知理論上ChatGPT產生程式應該沒有問題,但到底能不能用,

或是該怎麼用,這更是重要,本文沒有預設立場,結果其實不如預期,

雖說產生的程式碼看起來實在很"華麗",

但很多陷阱若是大不出問題,自然程式依舊無法正確執行,

我這邊分享幾個我看到的問題,與修正方式。

先提供用ChatGPT生成Python程式下載資料

請幫撰寫Python程式,下載網址:https://www.lotto-8.com/listltobigbbk.asp?indexpage=1&orderby=new,並存成CSV檔案

ChatGPT生成的程式碼:

import requests

from bs4 import BeautifulSoup

import pandas as pd

# 下載網頁內容

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

response = requests.get(url)

response.encoding = 'big5'  # 指定編碼以避免亂碼

# 確認請求成功

if response.status_code == 200:

    # 解析 HTML

    soup = BeautifulSoup(response.text, 'html.parser')

    # 提取資料

    # 根據頁面結構進行解析,這裡假設表格在 <table> 標籤內

    table = soup.find('table')  # 假設第一個 <table> 標籤就是我們需要的表格

    rows = table.find_all('tr')  # 找到所有的行

    # 準備資料存儲

    data = []

    # 解析行

    for row in rows:

        cols = row.find_all('td')

        cols = [ele.text.strip() for ele in cols]

        data.append(cols)

    # 將資料轉換成 DataFrame

    df = pd.DataFrame(data)

    # 將 DataFrame 存成 CSV 檔案

    df.to_csv('lotto_data.csv', index=False, header=False, encoding='utf-8-sig')

    print("資料已成功存儲到 lotto_data.csv")

else:

    print(f"無法下載網頁內容,狀態碼: {response.status_code}")

修正程式碼:

import requests

from bs4 import BeautifulSoup

# 設置目標URL

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

# 發送HTTP GET請求

response = requests.get(url)

# 確保請求成功

if response.status_code == 200:

    # 解析HTML內容

    soup = BeautifulSoup(response.content, 'html.parser')

    # 找到包含彩票數據的表格

    table = soup.find('table', "auto-style4")  # 修改這裡以匹配實際表格的class屬性

    S=""

    for tr in table.find_all('tr'):

        cells = tr.find_all('td')

        print(cells[0].text+","+cells[1].text+","+cells[2].text)

        S=S+cells[0].text+","+cells[1].text+","+cells[2].text+"\n"

    f=open("E:\\大樂透.csv","w",encoding="utf-8")

    f.write(S)

    f.close()

else:

    print(f'Failed to retrieve data: {response.status_code}')

結論:

ChatGPT目前生成的程式是很好的範本,但通常有一些程式錯誤需要修正,

例如本範例的

1.找出類別名稱:soup.find('table', "auto-style4")。

2.改用檔案物件取代相較複雜pandas模組。

因此,看懂HTML語法的標籤與類別,
找出擷取資料的規則是很重要的,目前這點AI無法取代。
其次,使用那種模組比較恰當,這點也是AI的罩門,
所以目前雖然程式可以多很多參考,
但程式的基本功還是很重要的。


AI生成程式真的大大縮短了程式設計的學習時間,

不用像以前需要填鴨式記憶一大堆程式碼,

但也不是不需要學習,而是學習程式設計的重點不同,

至少會看懂程式,並知道修改那些地方,

最好還是有除錯能力,若找不到錯誤,

還是可以把程式貼到ChatGPT請他幫忙除錯,

還真的很快找出來錯誤,至於不懂程式,

也可以請AI逐行解釋程式,解釋得實在是太詳細了。

總結AI能幫程式的至少有四,

一、生成程式

二、除錯程式

三、解釋程式

四、轉譯程式,可以把VBA轉為Python,

光這幾項,對程式小白來說,幾乎是直升機是能力提升,

但學習程式的重點需要調整,

不用死背程式,但須要看懂,

不用會寫程式,但要會跟AI溝通。

完整的教學影片:

https://terry55wu.blogspot.com/2024/06/chatgptpython.html


吳老師  113/6/5

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

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

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


其他相關學習: