Python網頁爬蟲可以說是現在大數據時代很重要的資料蒐集技術,在財經領域,很常會需要蒐集財經新聞或相關的股市資料,來作為後續的投資分析或參考,這時候就可以利用Python網頁爬蟲爬取網站上的財經資料,提升蒐集資料的效率。這篇文章就以Yahoo股市的財經新聞網站作為網路爬蟲應用實例,教大家如何使用Python網頁爬蟲來自動化爬取財經新聞資料。
- 網站分析及爬取策略
- Selenium發送請求
- Selenium自動化滾動網頁卷軸載入資料
- Selenium爬取網頁資料
一、網站分析及爬取策略
首先前往Yahoo股市的財經新聞網站,假設我們想要爬取其中的財經新聞區塊資料,如下圖:
在操作的時候可以發現需要滾動網頁捲軸,才會動態載入更多的財經新聞資料,所以我們就會需要選擇使用Python的Selenium套件來建置動態網頁爬蟲,透過它提供的網頁操作方法(Method),在操作網頁的同時動態爬取財經資料。
如果想要瞭解更詳細的Python網頁爬蟲爬取策略,可以參加我的免費線上培訓,教你各種網頁的爬取方法,讓你能夠輕鬆判斷網頁類型,爬取到想要的資料。
二、Selenium發送請求
接下來,打開Python網頁爬蟲專案,引用Selenium必要的模組,如下範例:
from selenium import webdriver #瀏覽器驅動模組 from webdriver_manager.chrome import ChromeDriverManager #Chrome瀏覽器驅動模組 from selenium.webdriver.common.by import By #網頁元素定位模組 import time #時間模組
更多Selenium專案的初始化與模組引用時機介紹,可以參考我的全面掌握Selenium建置動態網頁爬蟲的步驟與重要模組文章。
引用Selenium套件的模組之後,就可以建立瀏覽器驅動物件,發送請求到Yahoo股市的財經新聞網站,如下範例:
from selenium import webdriver #瀏覽器驅動模組 from webdriver_manager.chrome import ChromeDriverManager #Chrome瀏覽器驅動模組 from selenium.webdriver.common.by import By #網頁元素定位模組 import time #時間模組 driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get('https://tw.stock.yahoo.com/news/')
三、Selenium自動化滾動網頁卷軸載入資料
那Python網頁爬蟲要模擬使用者滾動網頁捲軸,就可以呼叫Selenium套件的exectue_script()方法,執行滾動網頁捲軸的JavaScript程式碼,並且透過For迴圈來重複執行滾動網頁捲軸的動作,如下範例:
from selenium import webdriver #瀏覽器驅動模組 from webdriver_manager.chrome import ChromeDriverManager #Chrome瀏覽器驅動模組 from selenium.webdriver.common.by import By #網頁元素定位模組 import time #時間模組 driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get('https://tw.stock.yahoo.com/news/') for x in range(4): # 滾動網頁捲軸 driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") # 滾動一次暫停3秒(可有可無) time.sleep(3)
四、Selenium爬取網頁資料
回到Yahoo股市的財經新聞網站,在財經新聞標題上點擊滑鼠右鍵,選擇「檢查」,可以看到它的網頁原始碼如下圖:
開啟Python網頁爬蟲專案,呼叫Selenium套件的find_elements()方法,來搜尋網站的所有財經新聞標題元素,而定位元素的方式我們使用CSS_SELECTOR方法,如下範例:
from selenium import webdriver #瀏覽器驅動模組 from webdriver_manager.chrome import ChromeDriverManager #Chrome瀏覽器驅動模組 from selenium.webdriver.common.by import By #網頁元素定位模組 import time #時間模組 driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get('https://tw.stock.yahoo.com/news/') for x in range(4): # 滾動網頁捲軸 driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") # 滾動一次暫停3秒(可有可無) time.sleep(3) titles = driver.find_elements(By.CSS_SELECTOR, "h3[class='Mt(0) Mb(8px)']")
最後透過For迴圈搭配Selenium套件的text屬性,將搜尋到的財經新聞標題元素讀取出來,並且取得爬取到的文字資料,如下範例:
from selenium import webdriver #瀏覽器驅動模組 from webdriver_manager.chrome import ChromeDriverManager #Chrome瀏覽器驅動模組 from selenium.webdriver.common.by import By #網頁元素定位模組 import time #時間模組 driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get('https://tw.stock.yahoo.com/news/') for x in range(4): # 滾動網頁捲軸 driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") # 滾動一次暫停3秒(可有可無) time.sleep(3) titles = driver.find_elements(By.CSS_SELECTOR, "h3[class='Mt(0) Mb(8px)']") for title in titles: print(title.text)
執行結果
五、小結
Python網頁爬蟲可以應用的領域非常多,只要是蒐集網路上的資料都可以使用,這篇文章和大家分享了財經領域的Python網路爬蟲範例,自動化蒐集財經網站上的相關資料,幫助實務上的投資策略擬定,提升分析的效率。歡迎在本文下方訂閱本站,讓你每週都能夠吸收優質的Python應用教學唷。
你可能有興趣的文章
留言
張貼留言