Web Scraping in Python (Crawl data from YAHOO! Stock)



在大數據專案中, 通常會面對兩種資料來源: 一個是公司內部系統的數據,一個是公司外部的資料, 能有效地整合分析內外兩類資訊源, 就能夠開發出高價值的Big data產品或系統, 此系統挖掘公司內隱的核心數據競爭力, 並以此反饋當前市場的熱門需求, 甚或建置潛在趨勢的進攻策略。當前最大最豐富的外部資源, 無庸置疑就是Internet, Web scraping就是挖取這個大金礦的軟體技術。

如果你搜尋“Web scraping”這個領域, 會發現其他像是 web crawling”, “Data Scraping”, “scraper”, “web crawler”, 甚至是”bot”等技術字眼, 這些字彙轉換為中文大略都用網路爬蟲軟體一以蓋之; 簡言之, “Web scraping”這領域是在鑽研如何從網際網路上, 收集擷取資料的軟體技術, 而目前Internet上資訊價值含金量最高的主要就是web網站, 因此我們要資料當然就是針對web下手。

學習Web scraping對於個人來說也是極具有效益的。當擁有Web scraping技術, 所有能透過瀏覽器看到的資料, 都可以回自己的電腦做進一步的分析, 這方面應用在一般投資人的世界早已行之多年; 遵從基本分析的投資人, 運用Excel等工具或其他的程式語言, 定期從公開觀測站抓取每月營收或財務報表數據, 因此一般投資大眾, 即使沒有如機構法人分析師擁有公司內部的資料庫完整財務資訊, 仍能進行專業的股票分析。



這篇文章我將以YAHOO!奇摩股市所提供的公司營收盈餘網頁為例子, 介紹如何使用PythonBeautifulSoup package, 收集如台積電公司的當年度, 和前一年度的每季稅後盈餘數據。閱讀完此篇之後, 各位將可以這篇文章中的技術為基礎, 進一步深研去抓取你每天所瀏覽的網頁資訊, 然後針對各位有興趣的主題進行各項分析。當然, 如果你對於收集上市櫃的財務數據深感興趣, 這篇文章所介紹的技術應已足夠開發出一個應用程式, 建立完整的上市櫃財務資訊。



以個人的經驗, 90%左右Web scraping需要的技術, 大約只需花費3天不到的時間就能學會, 因此Web scraping實在是一個回報率極高的軟體技能。一個Web scraper的通用流程如下:
1.      從網址位置擷取(retrieve) HTML資料
2.      剖析(parse)上述資料, 取得目標(也就是我們需要的)資訊內容
3.      儲存目標資訊內容
4.      (Optional), 移至次一個網址位置, 重複第一個步驟

Why Python and Libraries for Web Scraping

Web scraping並不是一個新穎的技術, 如前所述, 在早期簡單到用Excel也可以抓取網頁資訊, 那麼為何選擇Python進行Web scraping?

首先, Data Science領域, 大部分的人多少都會Python, 所以繼續用Python進行Web scraping也就是一個很正常的事情。當然這樣說並不表示PythonWeb scraping領域上一點都不厲害, 而我們還遷就於這個程式語言上; 相反地, Python提供了BeautifulSoupScrapylibrary, 提供程式開發人員強大的工具進行Web scraping專案開發。

最後一個原因在於Python在正規表示式(Regular Expression)的強大能力, 在所有的程式語言中, 大概只有Perl這個語言稍微勝過Python; Python在正規表示式上所提供出色的支援, 讓我們在Web scraping專案中, 可以更彈性的處理許多非結構性的網頁標籤,甚或進行網頁內容文字探勘的分析, 以取得我們最終需要的目標資訊。(更進階的文字探勘為自然語言(Natural Language)的支援與分析, 這部分已經遠超出這篇文章要討論的範圍了)


(文章未完, 編輯撰寫中...)






by J.D.