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

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

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

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

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

1088閲覧

Python スクレイピング 株価取得 Beatiful Soup

dfmasap

総合スコア3

スクレイピング

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

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/13 09:27

編集2020/09/13 12:43

https://non-dimension.com/kabuka-scraping/
上記サイトの株価を取得するコードを作成したいのですが、
私の方法ではエラーが出てきてしまいます。もしよろしければ、
どの点が間違えているのか教えていただきたいです。

プログラミングについてはprogateで少し勉強した程度なので、全く分からないです。
申し訳ございません。
以下のコードを動かし、株価の取得の自動化を行いたいのですが、うまくいきません。
google colaboratoryを使用しています。
こちらはどの点が間違えておりますでしょうか。
何も分からず恐縮ですが、ご回答いただけたら幸いです。

イメージ説明

python

1 2from google.colab import drive 3drive.mount('/content/drive') 4 5Mounted at /content/drive 6 7import csv 8 9csvfile = open('/content/drive/My Drive/google cora/code_list.csv') 10 11reader = csv.DictReader(csvfile) 12for row in reader: 13 print(row) 14 15from bs4 import BeautifulSoup 16import pandas as pd 17import requests 18from datetime import datetime 19 20def get_dfs(stock_number): 21 dfs = [] 22 year = [2018,2019] #2017〜2019年までの株価データを取得 23 for y in year: 24 try: 25 print(y) 26 url = 'https://kabuoji3.com/stock/{}/{}/'.format(stock_number,y) 27 soup = BeautifulSoup(requests.get(url).content,'html.parser') 28 tag_tr = soup.find_all('tr') 29 head = [h.text for h in tag_tr[0].find_all('th')] 30 data = [] 31 for i in range(1,len(tag_tr)): 32 data.append([d.text for d in tag_tr[i].find_all('td')]) 33 df = pd.DataFrame(data, columns = head) 34 35 col = ['始値','高値','安値','終値','出来高','終値調整'] 36 for c in col: 37 df[c] = df[c].astype(float) 38 df['日付'] = [datetime.strptime(i,'%Y-%m-%d') for i in df['日付']] 39 dfs.append(df) 40 except IndexError: 41 print('No data') 42 return dfs 43 44def concatenate(dfs): 45 data = pd.concat(dfs,axis=0) 46 data = data.reset_index(drop=True) 47 col = ['始値','高値','安値','終値','出来高','終値調整'] 48 for c in col: 49 data[c] = data[c].astype(float) 50 return data 51 52#作成したコードリストを読み込む 53code_list = pd.read_csv('code_list.csv') 54 55#複数のデータフレームをcsvで保存 56for i in range(len(code_list)): 57 k = code_list.loc[i,'code'] 58 v = code_list.loc[i,'name'] 59 print(k,v) 60 dfs = get_dfs(k) 61 data = concatenate(dfs) 62 data.to_csv('{}-{}.csv'.format(k,v))

python

1 2以下がエラーとして出てきました。 3 4--------------------------------------------------------------------------- 5--------------------------------------------------------------------------- 6FileNotFoundError Traceback (most recent call last) 7<ipython-input-46-64a85a5b6de8> in <module>() 8 37 9 38 #作成したコードリストを読み込む 10---> 39 codelist = pd.read_csv('codelist.csv') 11 40 12 41 #複数のデータフレームをcsvで保存 13 144 frames 15/usr/local/lib/python3.6/dist-packages/pandas/io/parsers.py in __init__(self, src, **kwds) 16 1889 kwds["usecols"] = self.usecols 17 1890 18-> 1891 self._reader = parsers.TextReader(src, **kwds) 19 1892 self.unnamed_cols = self._reader.unnamed_cols 20 1893 21 22pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.__cinit__() 23 24pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._setup_parser_source() 25 26FileNotFoundError: [Errno 2] File codelist.csv does not exist: 'codelist.csv' 27

python

1以下がエラーです。 2エラーが出た際、 3上のfor i in range(len(code_list)):のコードの部分に赤線が引かれていました。 4 5NameError Traceback (most recent call last) 6<ipython-input-55-b9a24c2bba32> in <module>() 7 40 8 41 #複数のデータフレームをcsvで保存 9---> 42 for i in range(len(code_list)): 10 43 k = code_list.loc[i,'code'] 11 44 v = code_list.loc[i,'name'] 12 13NameError: name 'code_list' is not defined

python

1以下がエラーです。次は上のこちらの部分に赤線がひいて 2ありました。→data = pd.concat(dfs,axis=0) 3 4 52424 ブラス 62019 7No data 82020 9No data 10--------------------------------------------------------------------------- 11ValueError Traceback (most recent call last) 12<ipython-input-67-3b125c0fc7ed> in <module>() 13 45 print(k,v) 14 46 dfs = get_dfs(k) 15---> 47 data = concatenate(dfs) 16 48 data.to_csv('{}-{}.csv'.format(k,v)) 17 182 frames 19/usr/local/lib/python3.6/dist-packages/pandas/core/reshape/concat.py in __init__(self, objs, axis, join, keys, levels, names, ignore_index, verify_integrity, copy, sort) 20 327 21 328 if len(objs) == 0: 22--> 329 raise ValueError("No objects to concatenate") 23 330 24 331 if keys is None: 25 26ValueError: No objects to concatenate

python

1以下が2framesを開いたエラー表記です。 2 32424 ブラス 42018 5No data 62019 7No data 8--------------------------------------------------------------------------- 9ValueError Traceback (most recent call last) 10<ipython-input-68-b8a81eea83a2> in <module>() 11 45 print(k,v) 12 46 dfs = get_dfs(k) 13---> 47 data = concatenate(dfs) 14 48 data.to_csv('{}-{}.csv'.format(k,v)) 15 162 frames 17<ipython-input-68-b8a81eea83a2> in concatenate(dfs) 18 29 19 30 def concatenate(dfs): 20---> 31 data = pd.concat(dfs,axis=0) 21 32 data = data.reset_index(drop=True) 22 33 col = ['始値','高値','安値','終値','出来高','終値調整'] 23 24/usr/local/lib/python3.6/dist-packages/pandas/core/reshape/concat.py in concat(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy) 25 279 verify_integrity=verify_integrity, 26 280 copy=copy, 27--> 281 sort=sort, 28 282 ) 29 283 30 31/usr/local/lib/python3.6/dist-packages/pandas/core/reshape/concat.py in __init__(self, objs, axis, join, keys, levels, names, ignore_index, verify_integrity, copy, sort) 32 327 33 328 if len(objs) == 0: 34--> 329 raise ValueError("No objects to concatenate") 35 330 36 331 if keys is None: 37 38ValueError: No objects to concatenate

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

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

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

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

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

Murasaki_PurPle

2020/09/13 09:29

マークダウンがありますので、コードを載せる際は使ってください。 (見辛いです)
dfmasap

2020/09/13 09:37

申し訳ございません。修正致しました。
meg_

2020/09/13 10:26

code_list.csvの文字コードは何ですか?
dfmasap

2020/09/13 10:35

utf-8で保存しました。
meg_

2020/09/13 10:53

> utf-8で保存しました。 であれば「UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 16: invalid start byte」のエラーは出ないはずですが不思議ですね。
dfmasap

2020/09/13 11:21

ご返信ありがとうございます。すみません、どこかで間違えていたようです。 再度確認したところ、csvの連結?はうまくいきました。 しかし最後の部分がまだエラーが出てしまっています。
meg_

2020/09/13 11:26

最新のコードとエラーが分かるように質問に追記してください。 1つのマークダウンの中に追記して書かれると非常に見にくい為、問題ごとに分けて書いてください。
dfmasap

2020/09/13 11:28

承知いたしました。ありがとうございます。
guest

回答2

0

FileNotFoundError: [Errno 2] File codelist.csv does not exist: 'codelist.csv' 指定されたパスには該当するファイルが存在しない、というエラーが出ています。正しいパスを指定すれば良いです。

Python

1#作成したコードリストを読み込む 2codelist = pd.read_csv('codelist.csv')

ではなく、おそらく

Python

1codelist = pd.read_csv('/content/drive/My Drive/google cora/codelist.csv')

だと思います。

※ところで以前の質問内容は消されてしまったようですね。消されてしまうと回答者の回答との整合性が取れなくなってしまうので良くないです。後から質問や回答を参照する人のためにも消すのではなく、追記する形にしましょう。

投稿2020/09/13 11:42

meg_

総合スコア10760

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

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

dfmasap

2020/09/13 11:50

ご教示いただきありがとうございます。修正致します。 何度も大変申し訳ございません。別のエラーが出てきてしまいました。 追記致します。
meg_

2020/09/13 12:05

「NameError: name 'code_list' is not defined」のエラーですが、直前のコード「code_list = pd.read_csv('code_list.csv')」で「code_list」を作成しているので出るはずのないエラーです。 notebookを頭から再度実行しても同じエラーが出るか確かめてください。
dfmasap

2020/09/13 12:19

お忙しい中初心者に付き合っていただきありがとうございます。 エラーが解決できました! しかし次にvalue errorが出てきてしまいました。これはサイトから値を取得できていないということでしょうか。何度も申し訳ございません。
meg_

2020/09/13 12:32

エラーは 関数 concatenate(dfs) の中のどこで出てますか? 2 framesの中に隠れてるかと思います。(おそらく”data = pd.concat(dfs,axis=0)”だと思いますが合ってますか?)
dfmasap

2020/09/13 12:44

すみません、2framesを開いたデータを添付しました。 そちらが間違っておりますでしょうか。申し訳ございません。
meg_

2020/09/13 13:00

dfsが空のリストになっているのがエラーの原因でしょう。 確認ですが、print('No data')のコードは実行されていないんですよね?
dfmasap

2020/09/13 13:19

すみません、実行していました、、 どこまでのコードを削除した方がよろしいでしょうか。また以下のコードを追加した方がよろしいでしょうか code_list = pd.read_csv('code_list.csv') code_list.head(10)
meg_

2020/09/13 13:42

例外処理を入れているとエラー発生元が分からなくなるので、一旦try、catchを止めて不具合の原因を探ってください。
dfmasap

2020/09/13 22:38

承知いたしました。ありがとうございます。
guest

0

CSVを正常に読み込ませられていますか?
https://note.com/092i034i/n/n76f2c2de1974

追記

「pandasでCSVを開こうとした際、UTF-8によるUnicodeエラーが生じた」と
明確に原因がわかっている場合には、まずは聞くのではなくご自身で検索するなどしましょう。
原因がわかっているのですから
「pandas csv utf-8 unicode error」
などといったワードで検索すれば同様の症状が生じている人の記事や解決法が出てくるはずです。

pandasではデフォルトでファイルのUTF-8のファイルとして読み込みしようとしますが
CSVのデータの中にshift-jisなどの他のUnicode文字列が含まれている為にエラーが生じます。
従って以下の様に、ファイルを操作する際にエンコードタイプを指定してあげる事で正常にファイルを読み込む事が出来るでしょう。

python

1code_list = pd.read_csv('/content/drive/My Drive/google cora/code_list.csv', encoding='shift-jis')

以下をドライブのパスに修正致しました。
~~code_list = pd.read_csv('code_list.csv', encoding='shift-jis')~~

投稿2020/09/13 09:45

編集2020/09/13 11:57
nto

総合スコア1438

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

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

dfmasap

2020/09/13 10:11

ありがとうございます。 こちらのサイトの様にCSVを読み込みました。 そうしたところ、Unicode Errorがでてしまいました。 そちらのエラーまでのコードを載せます。 大変恐縮ですが改善していただけないでしょうか。 よろしくお願いいたします。
dfmasap

2020/09/13 12:03

ありがとうございます。分かりそうな事は自分で調べようと思います。精進します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問