BeautifulSoupを用いて簡単にインターネット上のWebから情報をを収集することができます。
ここではYahooファイナンスから情報を切り出します
Pythonをインストールしている方は、PIPやcondaでインストールしてください lxml、pandas、requestsのインストールも忘れないように
Yahooファイナンスのホームページの仕組みをまず調べます
# Web scraping Yahooo Finamce
# sony page http://stocks.finance.yahoo.co.jp/stocks/detail/?code=6758.T
import requests
from bs4 import BeautifulSoup
def get_stockprice(code):
base_url = "http://stocks.finance.yahoo.co.jp/stocks/detail/"
query = {}
query["code"] = code + ".T"
ret = requests.get(base_url, params = query)
soup = BeautifulSoup(ret.content, "lxml")
stocktable = soup.find('table', {'class':'stocksTable'})
print(stocktable)
symbol = stocktable.findAll('th', {'class':'symbol'})[0].text
stockprice = stocktable.findAll('td', {'class':'stoksPrice'})[1].text
return symbol, stockprice
if __name__ == "__main__":
symbol, stockprice = get_stockprice("6758")
print (symbol, stockprice)
Yahooファイナンスのデータ取り込みの関数を作成します
# Web scraping Yahooo Finamce
import requests
from bs4 import BeautifulSoup
def get_stockprice(code):
base_url = "http://stocks.finance.yahoo.co.jp/stocks/detail/"
query = {}
query["code"] = code + ".T"
ret = requests.get(base_url, params = query)
soup = BeautifulSoup(ret.content, "lxml")
stocktable = soup.find('table', {'class':'stocksTable'}) # HP上のtable情報
symbol = stocktable.findAll('th', {'class':'symbol'})[0].text # HP上のTH情報
stockprice = stocktable.findAll('td', {'class':'stoksPrice'})[1].text # HP上のTD情報
return symbol, stockprice # 会社名と株価を抽出します
抽出したい21件の会社を会社コードで指定します
import pandas as pd
l = []
l.append("6758")
l.append("8411")
l.append("8306")
l.append("3103")
l.append("6803")
l.append("6502")
l.append("4689")
l.append("8107")
l.append("8303")
l.append("9101")
l.append("8604")
l.append("6501")
l.append("9972")
l.append("6753")
l.append("7201")
l.append("6752")
l.append("9501")
l.append("7011")
l.append("7647")
l.append("7211")
l.append("9104")
抽出します
m =[]
#header = "code", "symbol", "stockprice"
#m.append(header)
for el in l:
symbol, stockprice = get_stockprice(el)
print (el, symbol, stockprice)
m.append([el, symbol, stockprice])
print(m)
pandasで見やすく整形して出力
df = pd.DataFrame(m)
df.columns = ["code", "symbol", "stockprice"]
df