python」カテゴリーアーカイブ

pythonの引数は原則参照渡しだが、実際は限定的で注意

pythonの引数は、ミュータブル(変更が可能)とイミュータブル(変更ができない)ものが存在する。
つまり参照渡しをしてもイミュータブルの型(int,str,floatなど)は値が変わらないから値渡しと同じになる。ミュータブル型(list,setなど)を使えば参照渡しになる。
引数の値を変えたい場合はミュータブル型にするか、メソッドの返り値として変更した値を受け取るほうが理解しやすい。

参考URL

Python♪次は理屈で覚えよう「参照渡し」「浅いコピー」「深いコピー」
https://snowtree-injune.com/2019/09/16/shallow-copy/#toc7

 

【Python】参照渡しと値渡しの違い

https://algorithm.joho.info/programming/python/call-by-reference/

ボートレース公式サイトから情報を取得するスクレイピング

#2021/07/07
#環境:OS:Mac, 言語python, anaconda, 作業をするときはanaconda jupterのエディタよりMS Codeのほうがやりやすい。
#boatRaceCompuYosou.ipynbで使用
”’
・仕様
ボートレース公式https://www.boatrace.jp/
から「本日の払戻金一覧」のところを
クリックして、本日開催の場の開催時間をクリックする
出走表から結果までの情報を掲載したページが表示される
コンピュータ予想 https://www.boatrace.jp/owpc/pc/race/racelist?
その中のコンピュータ予想タブをクリック
「予想フォーカス」という項目に予想が表示される。
蒲郡  jcd=07 hd=20210707
1R rno=1

 

・目的:予想するレースの当選番号が出現するかもしれないレースを探す。

例えば6-全-全が出現するレースを探したい。その場合コンピュータ予想の予想フォーカスで予想されている番号に
6-全-全に該当しそうな予想が表示されていたら、そのレースを出力したい。
なお、コンピュータ予想は当然ながら、当たるとは限らず確率は低い
すべてのレースの予想を手動で探すのは面倒なので、自動で探したい。

 

・機能:該当のページから必要な情報を取得して、該当の情報(ここでは予想番号)を取得して

CSV出力する。

 

作業内容

1.「本日の払戻金一覧」7月7日の場合
https://www.boatrace.jp/owpc/pc/race/pay?hd=20210707
から開催される全レースのURLを取得
2.取得したURLを場ごとに取得。ループ
3.レースごとにループする
4「予想フォーカス」という項目のところの予想番号を取得する
5.予想する番号、例えば6,1の数字があればリストに追加する
6.CSV出力する。該当する予想がなければ出力しない。

 

※使用上の注意点

一度のスクレイピングとCSV出力だけに対応していて、前回作成したCSVを読み込んで処理を追記する仕様はない。
一度作成したファイルに、レース結果を追記変更することはしない。
ようするに、朝実行して、夜に実行しても朝作成したファイルを読み込んで処理をするものではない。
朝実行すると、朝のファイルを作成し、その後実行すればそのWebサイトの情報をCSVとして出力する。

 

>>なぜこのように書くかというと、レースが開催されるとレース結果が払戻金一覧ページに表示される。
レースが開催されていない場合は時刻が記載されていて、出力されるCSVの記載が異なるので、後日CSVの内容を
確認すると、「レース結果が後で追記されるのか?」と勘違いするかもしれない。
現時点では、払戻金一覧のレース前の状態で、コンピュータ予想を知りたいだけの機能である。
よってコンピュータ予想を取得してCSV出力して、その後の処理は何もしない。

 

ソースコード

クラスコード

CSVの出力例 6コースが予想されている番号を出力

その後、改良したクラスコードはこちら

今日のエラー、Python,JupyterLab「ChromeDriver only supports」

環境MacOS,Python,Chrome,JupyterLab、Mysql

症状:JupyterLab上でPythonを実行したらエラーが表示

エラー「

原因:Chromeドライバーのバージョンが異なる。

対応:ドライバーを最新に更新する 最新のバージョンを入れるpipとBrew

ターミナルでバージョンを確認するバージョンをチェックする たぶん古いものが入っている
chromedriver –version

https://sites.google.com/a/chromium.org/chromedriver/downloads
にアクセスして最新の番号を取得する。以下の==の右の方にバージョン番号を入れる。そしてMacのターミナルに以下を実行する

pip install chromedriver-binary==91.0.4472.101
brew reinstall chromedriver
#再度

chromedriver –versionを実行してダイアログエラーが表示された、セキュリティとプライバシーで許可する

Google Colaboratory python df.head 出力されない printで囲め

こんな感じでGoogle Colaboratoryでpythonを実行してheadの中身が表示されなかった。Colabでは単にprintで囲めばよいだけだった。

誤り
dflist=[6050,
3546
]
for list in dflist:
nlist=str(list)+’.T’
df=data.DataReader(nlist,’yahoo’,start,end)
df.head(2)
正しくは
dflist=[]
#1
dflist=[6050,
3546
]
for list in dflist:
nlist=str(list)+’.T’
df=data.DataReader(nlist,’yahoo’,start,end)
print(df.head(2))

python スクレイピング、BeautifulSoupライブラリ

#株探先物オプションのスクレイピング。取得した文字列をコピペしてTEXTにして、
#CSVに出力してMysqlにインサートするコード
#URLと日付と月限は手動で毎回入力する必要がある。

#以前はファイル作成まで手動で作業していた。
#WEBページを開き
#先物オプションの出来高データを取得して
#テキストファイルにする
#所定のフォルダにコピー、移動する
#個人用クラスメソッドを使う。

いままでWebdriverライブラリを使用していたが、空白部分が自動で削除されてしまった。
削除してほしくなかったので、BeautifulSoupライブラリを使用した。こちらのほうはクロムは起動しないし純粋にhtmlの文字を空白を含めて取得してくれた。
以下は今回作ったコードの一部。class cGetOption()
なおdef returnDriver(self,lurl)はwebdriverを使用したもので実際には採用しなかった。
株探の先物オプションのURLを取得して
そのページの文字列を取得。このとき、ある文字列Aと文字列Bの間の文字を取得(findFirstStrのところ)
そしてタプルで、文字列とファイル名文字列を出力する

https://github.com/maseda1030/yahoofinance_python.git

 

 

python、テキストファイル出力、配列に文字を連結するだけ

#python、トレーディングビューのリストに追加するテキストファイル出力、配列に文字を連結するだけ
#必要な情報は、リスト名(テキストファイル名)、企業コード(このコードは調べたい企業コードなので、これだけは自分で探さないといけない)

pythonスクレイピング,yahooふぁいファイナンス

#トレーディングビューのウォッチリスト(右側)のインポート(、、、のようなアイコン)で取り込める。テキスト名がリスト名になる
#複数企業の登録が楽になるのでチャートを選ぶのが楽になる。

出力例

Pythonを使ってヤフーファイナンス日経平均株価の時系列を取得、スクレイピング

Python を使ってヤフーファイナンス 日経平均株価の時系列を取得、スクレイピング
#https://stocks.finance.yahoo.co.jp/stocks/history/?code=998407.O
#日経平均株価の時系列のテーブル表から該当の文字列を取得する、日付 始値 高値 安値 終値

https://github.com/maseda1030/yahoofinance_python.git

 

出力例

 

今日のPythonエラー クラスを作ったときにtakes 0 positional arguments but 1 was given

Pythonで
クラスを作ってメソッドを作ったらエラーになった。
takes 0 positional arguments but 1 was given

https://qiita.com/matsuida55/items/4188430631353a7a1194
「pythonはクラスメソッドの引数1つ目に必ず self を取らなければならない。」

・結論
クラスのメソッドの引数は必要なくても、 引数selfを入れなくてはならない。

誤り:エラーになるtakes 0 positional arguments but 1 was given

正しい

 

Pythonを使ってヤフーファイナンス情報を取得、スクレイピング

#複数企業コード対応版 企業コードから企業名と株価を取得する
#Anaconda JupyterLabによる動作 Shift+Enterで実行になる

動作環境:MacOS 、Python、Anaconda JupyterLab

https://github.com/maseda1030/yahoofinance_python.git

面倒だった点は、複数タグが存在するタグ名tr,td,ddの扱い。複数の場合forで回して配列みたいにしてデータを取得する必要があるし、スペースが含まれるクラス名は別のプロパティ?で読み込む必要がある。

find_element_by_class_nameでスペースを含むクラス名はエラーとなるので、find_element_by_css_selectorとしてドット.で接続する。

誤り:el.find_element_by_class_name(‘stocksDtl clearFix’)

正:el.find_element_by_css_selector(“.stocksDtl.clearFix”)

以下はサンプルコード。使い方は、codelistに企業コードを入力すると、ヤフーファイナンスからスクレイピングして「コード、企業名、終値株価、前日比、日付」を半角スペース区切りで出力するだけ。ヤフーファイナンスに接続するときは、取得間隔を1,2秒程度空けている。連続で取得するとサーバ負荷が増えるから強制切断とかアクセスをブロックされてしまうかもしれない。

>>コード修正、Spanタグが存在しない時間帯があるみたいなので、存在するかどうかのチェックを追記した。2021年2月8日、12時06分