はじめてのJavascript

"ハッカー"って、なんかかっこいいと思いませんか。響きが。

 だから出身大学も文系だし仕事も文系総合職だけど、ハッカーになりたいなーなんて思ってたんですよね。

 それでPythonを勉強し始めたんです。

 プログラミング初心者にはいいって言うし。

Javaは人気すぎて天邪鬼な自分には合わないと思ったし。

 それで、おとといもハッカーになりたいなーって、ネットサーフィンしてたんです。 そしたら8946っていうサイトに行き着いて。

 一応Pythonの基本的文法は一通り勉強したし、一丁このサイトの問題を解こうと思ったんです。

 そしたらちんぷんかんぷんだったんですよね。

みんなjsとかできるみたいで、コメントとかもイミフ。

 だから、web系というのか、HTMLとか、jsとかも、勉強しよう。 って思ったっていう、それだけなんですが、とりあえず、初めてのjsコードを書いてみました。

 このページを開いた人が、自分がどこから来たのか、教えてくれる、というものらしい。

Webスクレイビングして株価を取得する

Pythonを勉強中。

今日はk-dbのサイトから指定した銘柄の最新250日分の株価情報を取得し、テキストファイルに書き込むコードを書いてみた。

いわゆるWebスクレイビングというやつ。

ここではソフトバンクの株価情報を取得している。

def get_kabu(nm="9984"):
    import requests, bs4
    source = requests.get("http://k-db.com/stocks/{}-T".format(nm))
    file = open("{}_k_data.txt".format(nm),"w")
    file.write("")
    file.close()
    soup = bs4.BeautifulSoup(source.text, "html.parser")
    for i in soup.findAll("td"):
        file = open("{}_k_data.txt".format(nm),"a")
        kabu_data = str(i.string)+"\n"
        file.write(kabu_data)
        file.flush()
    file.close()

get_kabu()



なんとか、うまく動いてくれた。

以下、復習がてらざっくりとそれぞれの部分を振り返ってみる。

①まずは関数の引数として渡した銘柄番号を使ってk-db.comにアクセス。

source = requests.get("http://k-db.com/stocks/{}-T".format(nm))

②以下で取得した情報を書き込むテキストファイルを準備

file = open("{}_k_data.txt".format(nm),"w")
file.write("")
file.close()

③次にBeautifulSoupを使って、"td"タグ内の文字列を取得し、kabu_dataという変数に代入。これをソースの"td"タグ分繰り返す。

soup = bs4.BeautifulSoup(source.text, "html.parser")
for i in soup.findAll("td"):
    file = open("{}_k_data.txt".format(nm),"a")
    kabu_data = str(i.string)+"\n"

④また、"td"タグ分、準備していたテキストファイルに書き込む動作を繰り返す。

file.write(kabu_data)
file.flush()

以上。

次はデータ分析などで使えるような形で取得するコードを書いてみたい。

といっても、まだデータ分析に使うためのモジュールの使い方もわかっていないので、まずはその勉強からかな。

anacondaのtkinterが最新じゃない?

先日

『確かな力が身につくPython「超」入門』で勉強してみた感想・正誤表 - ぶれぶれなるままに

こんな記事を書いた。

この本の最後のサンプルコードを実行しようとすると、

objc[53791]: Class TKWindow is implemented in both /Users/user/.pyenv/versions/anaconda3-2.5.0/lib/libtk8.5.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
Segmentation fault: 11

というエラーが出て、実行できないという問題が発生した。 そもそもその前に、

python[1044:19431] setCanCycle: is deprecated.Please use setCollectionBehavior instead

というようなメッセージも出てきていて、なんじゃこりゃ?ということになった。

いろいろ調べたらなんとなく原因がわかったので、メモ。

でも解決策といえるものは発見できなかったので、誰か良い方法あったら教えてください。

python[1044:19431] setCanCycle: is deprecated.Please use setCollectionBehavior instead

ここを見る所によると、どうやらこのメッセージは、インストールしているanacondaに入っているtkinterのバージョンが古いことによる警告文であるらしい。ただ、基本的なtkinterの機能は使えるっぽい。

②objc[53791]: Class TKWindow is implemented in both /Users/user/.pyenv/versions/anaconda3-2.5.0/lib/libtk8.5.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.

これはどうやらMacのシステムに入っているtkinterのフレームワーク?みたいなものと、anacondaにインストールされているtkinterのバージョンが、使いたい機能に対応していなくて、どっちもベストの選択肢じゃないんだけど、、、とpythonが混乱している、らしい。

だから、anacondaにバンドルされているtkinterのバージョンが新しくなるまで待つ、のが必要らしい。

まとめ

①も②も結局tkinterが最新じゃない、ということらしい。

acondaじゃなくて普通に単体でインストールしたpythonではサンプルコードは動いたので、まぁ今回はこれくらいで、これ以上はまって時間を無駄にしないことにしました。

『確かな力が身につくPython「超」入門』で勉強してみた感想・正誤表

『確かな力が身につくPython「超」入門』Pythonを勉強した。


多分初心者にとっても基本的にはわかりやすい。

自分はすでに「プログラミング超初心者が初心者になるためのPython入門」シリーズでPythonの基礎を勉強済みだったので、当然、大体のことは理解できた。

Pythonの文法や標準ライブラリの基礎だけでなく、Webスクレイビングや、Web APIの使い方、画像処理、その他モジュールの使い方など、Pythonの可能性を感じることのできる内容になっており、素晴らしい。

ただ、プログラミング系の本にはつきものなのか、誤記も多い。最も残念なのが、最後のQRコード生成アプリのコードが間違ってる。。。

本の集大成のコードが間違っているというのはちょっと詰めが甘すぎるんじゃないの?と言いたくなる。

初級者の自分は何時間もはまってしまいました笑

そんな哀れな初級者のための正誤表↓気づいた所だけ。


p75 (本文)
【誤】集合型は辞書型と同じ()カッコを使い、リスト型やタプル型と同じように要素を並べて〜
【正】集合型は辞書型と同じ{}カッコを使い、リスト型やタプル型と同じように要素を並べて〜

p.108 (コード内)
【誤】while (counter < 5:)
【正】while (counter < 5) :

p.153(本文)
【誤】Classの中にwalkメソッドが存在したので、親クラスのwalkメソッドを事項し、「歩くあるく」と表示されたのが〜
【正】Classの中にwalkメソッドが存在したので、親クラスのwalkメソッドを事項し、「あるく」と表示されたのが〜

p.217(本文)
【誤】この4行目のポイントは、最後に新しいメソッドjson()を使っていることです。このjsonメソッドは、JSON形式(→p.213)で返ってきたデータを扱いやすいように変換してくれます。
【正】この4行目のポイントは、最後に新しいメソッドjson()を使っていることです。このjsonメソッドは、JSON形式(→p.218)で返ってきたデータを扱いやすいように変換してくれます。

p.274(コード内)
【誤】~ImageTk.PhotoImage(qr_label.qr_img.size)
【正】~ImageTk.PhotoImage(qr_label.qr_img)


でも、わかりやすいし面白いし、Python初心者には本当にオススメです!