2018年2月25日 星期日

[程式] Pandas 初體驗:找出投資商品配息資料


因為想要用 Python 來協助我更快看股票配息資料,找到了 Pandas 和 [Python] 使用 Pandas 來撈資料,照著上面的做,很快的我可以抓到 stockq 的資料(程式如下)
import pandas as pd
url = 'http://www.stockq.org/market/asia.php'
table = pd.read_html(url)[4]
table = table.drop(table.columns[[0,1,2,3,4]],axis=0)
table = table.drop(table.columns[9:296],axis=1)
print table
我想抓我最常看殖利率的網站 Goodinfo! 台灣股市資訊網,卻得到 error 如下

ValueError: No tables found

用 WHATS MY INFO 確認一下 user-agent 是 Python-urllib/2.7,再用 User-Agent Switcher for Google Chrome 測試一下,果然會得到 "請勿透過網站內容下載軟體查詢本網站" 的回應。

試著把他換成一般 chrome browser 的 user-agent 再試試,果然讀的到東西(程式如下)
import pandas as pd 
import requests
url = 'https://goodinfo.tw/StockInfo/StockDividendPolicy.asp?STOCK_ID=1416'
table = pd.read_html(requests.get(url, headers={'User-agent': 'Mozilla/5.0 
(Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/63.0.3239.132 Safari/537.36'}).text)
print table
後來發現 Yahoo Finance 是比較適合拿資料的地方,因為他可以拿到台港美股的資料,但改成用 Yahoo Finance 後又遇到下面這個錯誤
TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U95') dtype('<U95') dtype('<U95')

這個錯誤是跟編碼有關的問題,看起來是 pands.read_html() 裡面產生的問題,之前用 Python 爬東西時,也常遇到這種編碼問題,為了避開這個問題,我們先將資料用 BeautifulSoup 做處理,拉出 table 後,再餵進 pandas,就可以抓出 Yahoo Finance 上面顯示的歷史配息資料了,執行後會看到 Quote:,輸入在 Yahoo Finance 上找的到的代號,就會顯示結果如下了,程式和執行結果如下:

程式:
import pandas as pd 
import requests
from bs4 import BeautifulSoup
x = raw_input("Quote: ")
url = 'https://finance.yahoo.com/quote/'+x+'/history?period1=946915200&period2=1519401600&interval=div%7Csplit&filter=div&frequency=1d'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
table = soup.find_all('table')[0];
dfs = pd.read_html(str(table))
for index, row in dfs[0].iterrows():
    print row[0], row[1]

執行結果:
Quote: 2330.tw
Jun 26, 2017 7 Dividend
Jun 27, 2016 6 Dividend
Jun 29, 2015 4.49988 Dividend
Jul 14, 2014 2.99991 Dividend
Jul 03, 2013 2.99955 Dividend
Jul 04, 2012 2.99948 Dividend
Jun 29, 2011 2.99951 Dividend
Jul 06, 2010 2.99973 Dividend
Jul 15, 2009 2.98497 Dividend
Jul 16, 2008 3.00989 Dividend
Jun 08, 2007 2.98459 Dividend
Jun 20, 2006 2.42631 Dividend
Jun 13, 2005 1.90457 Dividend
Jun 14, 2004 0.529159 Dividend

因為這是初體驗,所以沒有任何 error handle 的處理,請小心使用 :)

安裝 library 方法:
pip install pandas
pip install BeautifulSoup
pip install requests

Reference:
Pandas
[Python] 使用 Pandas 來撈資料
Goodinfo! 台灣股市資訊網
WHATS MY INFO
User-Agent Switcher for Google Chrome
BeautifulSoup

2018年2月3日 星期六

[職場] 改善履歷也試著改善公司

我在職場文章裡曾提到過要有改善履歷的習慣,今年在訂目標的時候覺得,如果你在思考如何讓自己加分的同時,也同時想著讓公司也加分,不再只是單從自己的目標出發,這樣對你會更好的,因為你在進步,同時也督促公司一起進步。

讓自己跟著公司的方向走
這點比較容易,畢竟是從自身改變,若公司的方向是提升設計能力,你可以去想設計這件事需要哪些能力,你可以試著去提升這些能力,並且將你的提升加到履歷上,讓自己加分同時也跟上公司的腳步,朝雙贏的局面走。

讓公司跟自己的方向走
這點比較困難,因為你必須要能影響公司,不過困難不是做不到,得看你有沒有決心,把自己想走的方向定出來,在各種場合不斷提出且說服各個能決定公司方向的人,你一定能辦到,就算你不是 CEO,你也可以有機會影響 CEO;這個方向要思考的會不太一樣,因為你也必須思考別人想看怎麼樣的公司,若你真的影響了公司但卻是負面的,那可就本末倒置了。

有了這種正向的想法與做法後,你可以不用把時間花在抱怨公司,而是花在如何讓自己和公司加分上,你會活的更有方向。

相關文章:
[職場] 如何提醒自己有危機意識
[職場] 你想看怎麼樣的履歷