スクレイピングしてPandasデータフレームへ
記念すべき(?)初投稿記事「pythonスクレイピングはじめの一歩」に「いいね!」を下さった方々、ありがとうございます。
今回はもう少しだけ発展させ、「スクレイピングした結果をPandasのデータフレームにセットしてcsv出力」するコードです。
当初は挙動が掴みづらくてPandas大嫌いだった私ですが、いつの間にか「import pandas as pd」を真っ先に書くようになってて、あれれー?って感じです。なんだかんだ便利なんですよね・・・。
では、コードはこちら↓
※Python3
※urllib、BeautifulSoupのインストールは別途必要
# import ----------------------------------
from urllib import request
from bs4 import BeautifulSoup
import pandas as pd
# setting -------------------------------
URL_BASE = 'https://kabutan.jp/stock/?code='
# データ格納用のデータフレーム -------------------------------------
df = pd.DataFrame()
# 銘柄コードのループ -------------------------------------------
for code in [4092, 5357]:
# get html ----------------------------------
url = URL_BASE + str(code)
html = request.urlopen(url)
# Beautiful soup ----------------------------------
soup = BeautifulSoup(html, 'html.parser')
# 四本値取得、セット ------------------------------------------
table = soup.findAll('table',{'class':'stock_st_table'})[0]
rows = table.findAll('td')
for i, row in enumerate(rows):
buf = row.get_text()
if buf in ['始値','高値','安値','終値']:
key = buf
df.loc[code, key] = rows[i+1].get_text()
# csv出力 -------------------------------------
# indexに設定していた銘柄コードを"code"という列に持たせる
df.reset_index(inplace=True)
df.rename(columns={'index':'code'}, inplace=True)
# 書き込み
df.to_csv('scraping.csv', index=False)
※必要に応じてwebページのソースコードを確認する(chromeなら右クリック→「ページのソースを表示」)
locでの値のセットは速くないですが、処理時間が気になるような量でなければ分かりやすくて良いと思います。
前記事でも書きましたが、サイト側に負担をかけるような過度なスクレイピングはやめましょう。
欲しい情報を載せてくれているサイトへのリスペクトを大切に!
Author And Source
この問題について(スクレイピングしてPandasデータフレームへ), 我々は、より多くの情報をここで見つけました https://qiita.com/yoinhu/items/5f3eea05fd31aa4f20b1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .