2017年8月18日 星期五

Python ê 例 - 用 Python 掠股票的價數

頭前咱介紹 Python 上基本的用法佮概念,久--來,嘛真無聊。咱佇遮來介紹一个例,會當去網路去(sa)資料轉--來。這咧程式真簡單,頭到尾,無算空佮註解,差不多十

這篇是參考原文:How to scrape websites with Python and BeautifulSoup,另外佇 TechOrange 有華語的翻譯:附範例與完整程式碼!手把手帶著你用 Python 做出爬蟲、抓取網頁資料
毋過,伊毋是頂面 ê 例 Copy and Paste 就好,嘛是有一寡鋩鋩角角愛修整。而且原例是 Python 2 的程式,我會閣揣出方法來予伊踮 Python3 會使振動。

當然,你若會曉一寡網頁 ê 設計智識閣好。毋過,就算毋捌嘛免煩惱。因為,這款的寫法是一種 SOP ê 寫法。咱講个 SOP (台羅: e-su-oo-phi, 英文: Standard Operation Procedure),就是講只要你會電腦環境和我相仝,抑是差不多,干焦照文章內講个照步來共命令拍入去,你的程式就會振動。

啥乜是網 (Web scraping)?

網(Web scraping) 是一種踮網路頂,共你欲的資訊搜揣出來的技術。

你會問,咱用 Chrome, IE, Firebox, Safari 去看就好,那有啥乜特別咧? 咱佇遮講个揣資料,毋是一筆兩筆,是大量的資料。比如講,我干焦想欲知影一百間公司的股票這馬懸? 平均偌濟? 你當然會當一間一間去拍開,用鳥鼠一直點點點,揣著公司股票,伊記--落來。仝款的動作做一百改。每擺你拍開一間公司的網頁,干焦一咧數字niâ-niâ。。不而過,你會看著圖啦,公司的 li-li-khok-khok 的資料,這攏毋是你想欲--ê。這時,咱愛咱無愛 ê 物件鑢予清氣,咱欲愛ê物就好。

鑢網就是佇網頁中,你欲的物件--出來的技術。鑢網是叫電腦共你鬥做,毋是你家己去鑢。

開始

咱是想欲使用 Python 語言來鑢,閣加上伊的一咧程式庫 BeautifulSoup (台羅發音: piú-tho-hu-sup)。
  • 若是 Mac/Linux 使用人,本底就有 Python, 先檢查伊的版本。開一咧 terminal,拍 python --version ,你會當看著伊的版本是 2.7
  • 若是 Windows,參考Python 官網來安裝。
  • 因為咱目標是佇 Python3 頂仔運行,嘛愛檢查有 Python3 無? 佇我的 Linux (Ubuntu 17.04),是 python3。

閣落--來,咱安裝 pip,佇 terminal,
easy_install pip
easy_install3 pip
pip install BeautifulSoup4

注意: 這愛佇 superuser/root 的身份運行,有一寡系統直接佇頂仔三的命令前sudo 就有法度運行。

基礎

佇開始進前,咱先了解一寡 HTML (台羅:e-tshi-thi-emu-elo) ê 基礎和鑢網 ê 規則。


HTML 標籤(piau-tshiam)

你若已經知影 HTML tag, 會共這段--過。

簡單講,你佇遊覽器(英文: Browser,像 Google Chrome, Firefox, IE, Safari 等等) 看著 ê 網頁,毋是遊覽器實際看著 ê 網頁遊覽器看著 ê 網頁。你會使想做是電影抑是電視ê 劇本: 觀眾看 ê 戲,是先有劇本予導演拍戲,伊會寫一寡台詞無 ê 物件,親像表情,場所來予演員搬戲。HTML 就是劇本,Tag (標籤) 就是共遊覽器講這咧所在个字是用啥物字體,大細,色緻,遊覽器照咧做出ê,就是你看著--ê。

<!DOCTYPE html>
<html>  
    <head>
    </head>
    <body>
        <h1> First Scraping </h1>
        <p> Hello World </p>
    <body>
</html>


頂仔這段,就是上基礎 ê HTML 網頁。

1. <!DOCTYPE html>: HTML 定著愛用這款 ê 型態宣告 (Type Declaration).
2. 規个 HTML ê 文件,是予 <html> 和 </html>包--咧。
3. HTML 文件 ê meta (台羅: mé-thà) 佮戲文( script) 宣告是佇 <head></head>
4. HTML 文件看會著ê部分是佇 <body>佮 </body>籤中方。
5. 標題是佇uì <h1> 到<h1>標籤。
6. 段落是用 <p>標籤.

閣有一寡有路用的標籤,像 <a> 來表示超連結(hyperlinks),<table> 來標示表格<tr> 來表示橫逝(Row),<td> 來表示直逝(Column)。

HTML 標籤不時有用著id(ái-ti) 抑class(ku-lé-sū)ê 性質(attributes)。id 性質指定一咧唯一 ê (Value),這个踮規个 HTML 文件裡愛是獨一無二。class 性質用來共一寡定定用的 HTML 標籤組合,合起來準做一咧 class,後擺若使用這咧 class,就是仝款 ê 效果。咱會當利用 id 和 class 來搜揣欲挃 ê 乜件。

若欲了解較濟 HTML 標籤,id,和 class,會用(ē-i̋ng) 參考 W3Schools Tutorials

鑢網愛守 ê 規則

1 欲鑢進前,先檢查網站 ê 使用條文和條件 (Terms and Conditions)。特別愛注意和使用資料有關係ê法律條文。普通是袂用佇商業使用。
2 你 ê 程式莫霸霸佇咧資料,按呢有可能共網站害--去。予你 ê 程式較有禮貌咧,親像咱人類上網彼囉款,差不多一秒鐘一咧網頁較好。
3 網頁 ê 佈置 (Layout) 定定變,有時你嘛愛用遊覽器去彼咧網站確認,修改你 ê code。


分析網頁

咱用 Bloomberg Quote 中(tiőng) ê 一頁來做例。
有一咧做股票ê人,想欲 uì 這咧網頁來出股票名抑是代碼(Index name),佮伊的價數。首先咱開一咧遊覽器(我ê是 Google Chrome),先共鳥鼠徙去股價頂仔,揤鳥鼠 ê 正鈕,揀 "檢查" :


咱就會當看著全頁變按呢:



咱共正手爿,頂仔 ê 所在共伊放大來看:


咱會當看著股價是囥佇幾落棧 ê HTML 標籤tiőng,就是 <div class="basic-quote"> → <div class="price-container up"> → <div class="price">

利用 HTML tag,這馬咱了解價數是囥佇這咧網頁 ê 佗位。
仝款 ê 道理,咱會當揣其他 ê 物件,親像 S&P 500 Index,恁會使家己試看mài。

行入 Code 裡

咱知影欲挃 ê 資料佇佗,會用咧開始寫咱的鑢網程式。這馬拍開你 ê 編輯器 (Editor)。

咱先用 import 來引入欲使用著 ê 程式庫:
# import libraries
import urllib2
from bs4 import BeautifulSoup


紲--落來,宣告一咧變數,囥網頁 ê URL(台羅: iú-a-e-lo),也就是咱連鞭欲去掠資料 ê 網頁:
# specify the url
quote_page = 'http://www.bloomberg.com/quote/SPX:IND'

利用 urllib2,去共彼咧網頁捎--轉來:
# query the website and return the html to the variable ‘page’
page = urllib2.urlopen(quote_page)

落尾,用 BeautifulSoup 來伊滾滾ê,做好啉 ê 湯,就是網頁成做 BeautifulSoup ê 樣(format):
# parse the html using beautiful soap and store in variable `soup`
soup = BeautifulSoup(page, ‘html.parser’)

這馬,湯/soup內底就是規个 HTML ê 料,咱欲開始去股價--出來。
閣會記得彼 HTML 標籤有幾落--無? BeautifulSoup 有一咧 find() 來kā咱鬥相共。佇咱這咧例--,HTML class name 是唯一ê,先kā伊揣--出來:
# Take out the 
of name and get its value name_box = soup.find(‘h1’, attrs={‘class’: ‘name’})

著這咧標籤,咱會使用伊的 text 來提伊的資料:
name = name_box.text.strip() # strip() is used to remove starting and trailing
print name

和頂仔相siâng,股價嘛會著:
# get the index price
price_box = soup.find(‘div’, attrs={‘class’:’price’})
price = price_box.text
print price


這馬你會使共頂--仔殕色裡的 code, 都入去編輯器內,予好,嘛會使 uì 附件連結,是我試過會振動 ê 戲文。你--落來(Download)佇電腦,用 python web-scrape.py 來運行。

web-scrape.py

佇下一篇,我欲這篇小khua改一咧,先欲共伊uì Python 2 改做 Python3




沒有留言:

佇 Linux 來看GPX 檔案

最近定定有戶外活動。使用𤆬路機 (GPS) 來記錄行過的路線。普通我記錄路線,攏是用手機仔抑是專門个𤆬路機,罕得用電腦來看。 毋過,"仙人拍鼓有時錯,跤步踏差啥人無"。有一擺我無細膩,袂記得共一擺活動的路線收煞起來,閣直接開始記錄下一擺的活動,按呢共幾落...