質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

875閲覧

複数ページのデータを取れない

Azzukky

総合スコア9

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/05/21 06:10

前提・実現したいこと

python3でソフトバンクの過去1年分の株価を取得する練習をしています。
全部で13ページに分かれた表から、1ページ目はデータフレームで取り出せるのですが、
2ページ目以降がfor文で取り出せません。

最終的に、1ページ目と2ページ名意向を結合させたデータフレームを作成したいのです。

発生している問題・エラーメッセージ

2ページ目以降はページ毎にカラムが挿入され、よくわからない形で出力される。 日付 始値 高値 安値 終値 出来高 調整後終値* 0 2020年4月16日 1397.0 1400.0 1385.0 1396.5 6110500 1396.5 1 2020年4月15日 1372.5 1399.5 1366.0 1397.5 8071700 1397.5 2 2020年4月14日 1366.0 1374.0 1349.0 1372.5 8076500 1372.5 ... 17 2020年3月24日 1400.0 1421.0 1352.0 1373.0 22251400 1373.0 18 2020年3月23日 1430.0 1448.0 1382.0 1414.0 22722400 1414.0 19 2020年3月19日 1468.5 1493.5 1440.0 1463.5 24010800 1463.5 日付 始値 高値 安値 終値 出来高 調整後終値* 0 2020年3月18日 1455.0 1466.0 1441.0 1455.0 17950800 1455.0 1 2020年3月17日 1405.0 1452.0 1404.5 1434.5 16302000 1434.5 2 2020年3月16日 1427.0 1462.5 1418.0 1425.0 14087100 1425.0

該当のソースコード

import pandas as pd url1 = 'https://info.finance.yahoo.co.jp/history/?code=9434.T&sy=2019&sm=5&sd=21&ey=2020&em=5&ed=21&tm=d&=' sb_stock1 = pd.read_html(url1, header = 0) for i in range(2, 14): pages = 'https://info.finance.yahoo.co.jp/history/?code=9434.T&sy=2019&sm=5&sd=21&ey=2020&em=5&ed=21&tm=d&p=' + str(i) sb_stock2 = pd.read_html(pages, header = 0) print(sb_stock2[1])

試したこと

補足情報(FW/ツールのバージョンなど)

JupyterLabを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こちらのページはご覧になりましたか。
Yahoo!ファイナンス掲載情報の自動取得(スクレイピング)は禁止しています

それはそれとして、下記のようにfor内でconcatを用いてsb_stock1にくっつけていくのが良いかと思います。(スクレイピングOKなサイトで試してみてくださいね)
pandas.DataFrame, Seriesを連結するconcat

python3

1import pandas as pd 2 3url1 = 'https://info.finance.yahoo.co.jp/history/?code=9434.T&sy=2019&sm=5&sd=21&ey=2020&em=5&ed=21&tm=d&=' 4sb_stock1 = pd.read_html(url1, header = 0) 5for i in range(2, 14): 6 pages = 'https://info.finance.yahoo.co.jp/history/?code=9434.T&sy=2019&sm=5&sd=21&ey=2020&em=5&ed=21&tm=d&p=' + str(i) 7 sb_stock2 = pd.read_html(pages, header = 0) 8 sb_stock1 = pd.concat([sb_stock1, sb_stock2]) 9 print(sb_stock2[1])

投稿2020/05/21 06:18

編集2020/05/21 06:57
jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Azzukky

2020/05/21 06:51

存じませんでした。 ご教示ありがとうございました。
jeanbiego

2020/05/21 06:58

コメントに、concatを使った例を載せました。
Azzukky

2020/05/21 07:51

ありがとうございます。 concatで繋げていく、繋げる時は[1]等指定せずにまとめて繋げるのですね。 スクレイピング許可サイトを見つけて試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問