STEAM教育ならぬ、STEAMライフ Science + Technology + Engineering + Art + Mathematics
旧『“PLASSON”自作二足歩行ロボット Personal Low-tech ASSembly Of Nisokuhokou 』

プログラミングの最近の記事

約1年ぶりに、Pythonプログラミング環境を復活させました。Windowsを再インストールした際に消滅したままだったのです。

Anaconda+Pycharmで、ひとまず1年ほど前の日経ソフトウェア2020年5月号の付録「5日でできる!Pythonでゲーム作成入門」で遊んだソースは、エラーの要因も想定した通りで、動くようになりました。

Python_kaihatukannkyou01.png

1年前はわけも分からず書いてあるがままにインストールしたAnaconda+Pycharmでしたが、今回は公式版Python+VSCodeにしようかしばらく迷ったおかげで、少し頭の中が整理された気がします。

この「5日でできる!Pythonでゲーム作成入門」の続編が、日経ソフトウェア2021年5月号の付録「5日でできる!Pythonでゲームプログラミング入門」として出ていました。仮想環境は同じでいけそうです。

また、5日でできるレベルから(^^;、少しずつプログラミング遊びを再開したいと思います。

 



このサイトで使っているレンタルサーバーは、バリューサーバー(「まるっとプラン」)です。

以下、このサーバー上でPythonプログラムを動かすにはどうすればいいのか、のメモです。

 

■バリューサーバーの「料金・プラン」のページ
 https://www.value-server.com/spec/
 仕様詳細の中にある実行パスの表では、

ーーー

/usr/local/bin/python

ーーー

とされているのですが、

■Webエンジニアの仕事見聞録
 レンタルサーバー各社でのPythonの実行方法のまとめ
 https://engineer-milione.com/create/python-execution.html
 コアサーバー、バリューサーバーの場合

によれば、上記実行パスは python 2系で、python 3系は
/usr/local/bin/python3
ということらしいです。

せっかくなので、このサイトに感謝しつつ、書いてあることに従って進めてみました。

「.py」で動かすために.htaccessに

ーーー

AddHandler cgi-script .py

ーーー

と追加して(というか、python用のディレクトリを作って、この1行だけの.htaccessを置いて)、

[動作確認用プログラム]として

ーーー

#!/usr/local/bin/python3

print ('Content-Type: text/html\n\n')
print ("Hello world!")

ーーー

という「hello.py」というファイルを置いて、

パーミッションは「700」で大丈夫

とのことなのでそう設定しました。

これをWebブラウザでアクセスしてみると

Internal Server Error

ですとー(笑)

紆余曲折しましたが、結論から言うと、改行コードがLFじゃなかったのです・・・。基本だよ基本!

 

ちなみに、このパーミッションと改行コードの問題は、修正したりするたびに起きることで、

■Perlゼミ
 2019年はPerlはCGIの欠点を克服できるのか
 https://tutorial.perlzemi.com/blog/20190328085626.html

によれば、FTPではなく、うわさに聞く「Git」とやらを使えば楽なようなのですが。



「土日でわかるPythonプログラミング教室」
・金曜日:環境構築
・土曜日:Pythonプログラミング
・日曜日:Webプログラミング

*************************************************
■日曜日:Webプログラミング

<本の内容>
DockerのLinux環境からgit clone コマンドでWebアプリ版「人工知能?ななこ」のソースをもってくる。
 
・・・

前と同様、GitHubからソースを単純にダウンロードして、、、ターミナルから python manage.py runserver ・・・

なんか、たくさんエラーが出た(^^;
 
一度、まっさらなDjango
ーーーーーーーーーーーーーーーーーーーーーー
初めてのDjango開発
https://qiita.com/mas9612/items/d616a74f931babae4566
ーーーーーーーーーーーーーーーーーーーーーー
$ django-admin startproject mysite
$ python manage.py runserver

Starting development server at http://127.0.0.1:8000/

では、素直にサーバーが立ち上がりました。
環境がおかしいわけでないようです。

いろいろググってみると、例えば、以下の2つのような説明が。
ーーーーーーーーーーーーーーーーーーーーーー
Memo:[Django]バージョンによるurls.py内のincludeの仕様の違い
https://qiita.com/snuow/items/3350f2d2c713d55b8423
<エラー発生>
urlpatterns = [
  url(r'^testapp/', include('testapp.urls', namespace='testapp')),
]
<これでOK>
urlpatterns = [
  url(r'^testapp/', include(('testapp.urls', 'testapp'),)),
]
> 要するに、namespaceでapp_nameを指定するのではなく、2-タプルで渡してね。ってことみたい。
ーーーーーーーーーーーーーーーーーーーーーー
Djangoのincludeの仕様が変っていてハマったのでメモ
https://mocabrown.com/blog/archives/5346
<エラー発生>
urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^cms/', include('cms.urls', namespace='cms')),
]
<これでOK>
urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^cms/', include(('cms.urls','cms'),)),
]
> ポイントはnamespaceを使わないこと。それと、includeの一つ目の引数としてカッコでくくって渡すこと。
ーーーーーーーーーーーーーーーーーーーーーー

「2-タプルで渡してね。」とか「includeの一つ目の引数として」とか、まだよくわからんけど(^^;、僕の場合は

<現状エラー発生>
urlpatterns = [
  url(r'^admin/', admin.site.urls), #テキストでは使用しません。
  url(r'^api/', include('api.urls', namespace='api')),
  url(r'^', include('talk.urls', namespace='talk')),
]
なので、
<これでOKか?>
urlpatterns = [
  url(r'^admin/', admin.site.urls), #テキストでは使用しません。
  url(r'^api/', include(('api.urls', 'api'),)),
  url(r'^', include(('talk.urls', 'talk'),)),
]

・・・OKでした。Webサーバーが立ち上がりました。
会話をしようとテキスト入力すると、またエラーが・・・あ、そうか、前回のチャットボット同様、,encoding="utf-8_sig" を追記せねば。

結果、こんな感じです。

20200517_AInanako02.jpg

本では、どういう流れでこれが動いているかの解説が続きます。HTTP、JSON、MVCとMVT、Djangoのルーティング、Djangoでのリクエストとレスポンスの扱い方、JavaScript、jQuery、Ajax、、、Web開発のキーワード目白押し。
少ないスペースでポイントがギュッと詰まった感じで書いてあります。まぁ、大まかな把握レベルではあるのですが、目の前で動いているソースなので、説得力というか臨場感というか。

ちゃんと読めてませんが(^^;、Webまわりは、きっとそのうちやるでしょう。
「土日でわかるPythonプログラミング教室」はこれで終了です。

 

次は、スクレイピングの予定。数年前に日経ソフトウェアの付録でさわりをやりましたが、あらためて。どうなりますやら。



「土日でわかるPythonプログラミング教室」
・金曜日:環境構築
・土曜日:Pythonプログラミング
・日曜日:Webプログラミング

*************************************************
■土曜日:Pythonプログラミング
 
<本の内容(1)>
FizzBuzzプログラムを作ってみる。
 1.1から100まで出力
 2.3の倍数の時には数字ではなくFizzと表示
 3.5の倍数の時には数字ではなくBuzzと表示
 4.3と5の倍数の時には数字ではなくFizzBuzzと表示
 
・・・
 
とりあえず、この本は見ずに、日経ソフトウェア2020年5月号の付録「Pythonチートシート」を見ながら、書いてみました。

ーーーーーーーーーーーーー
for i in range(100):
  j=i+1
  if j%15 == 0:
   print("FizzBuzz")
  elif j%3 == 0:
   print("Fizz")
  elif j%5 == 0:
   print("Buzz")
  else:
   print(j)
ーーーーーーーーーーーーー

ちょっと中身を読んで改造
ーーーーーーーーーーーーー
for i in range(1,101):
  if i%3 == 0 and i%5 == 0:
   print("FizzBuzz")
  elif i%3 == 0:
   print("Fizz")
  elif i%5 == 0:
   print("Buzz")
  else:
   print(i)
ーーーーーーーーーーーーー

rangeは少し戸惑いました。
  for i in range(a,b):
って書いた時は、ついBASICの
  for i = a to b
だと思ってしまいます。。。実際には、
  for i = a to b-1
です。
正しくは
  for i in range(a,b):

  a ≦ i < b
です。
ということは、
  for i in range(b):
って書いたときも、iは0からb-1までb回まわる、と思ってしまっては間違いで、あくまでも
  0 ≦ i < b
なのだな。
 
本では、ここからしばらくPythonの基本文法(変数、演算子、if文、for文等)分の説明が続きます。
昨日の「金曜日:環境構築」は少々敷居が高い感じがしましたが、このあたりの説明はとても丁寧です。

 
<本の内容(2)>
DockerのLinux環境からgit clone コマンドでチャットボットプログラムのソースをもってくる。
 
・・・
 
うーむ。Windows10+Anaconda+Pycharmだとどうすればいいのかな・・・カミさんに聞いて、GitHubからソースを単純にダウンロードすることにしました。
GitやGitHubについては、また別の機会に確認することにします。

コピーしたソースを走らせるとエラーが発生・・・えぇと、一連のエラーの発端は、
UnicodeDecodeError: 'cp932' codec can't decode byte 0x87 in position 61: illegal multibyte sequence
ってやつだな。
DockerのLinux環境で動くソースだからutf-8が前提と思われるところ、WindowsのShift-JISではエラーになるってことかな。
そこでググって
ーーーーーーーーーーーーーーーーーーーーーー
WindowsでCP932(Shift-JIS)エンコード以外のファイルを開くのに苦労した話
https://qiita.com/Yuu94/items/9ffdfcb2c26d6b33792e
ーーーーーーーーーーーーーーーーーーーーーー
を参考に、ファイルをオープンしているところに
「,encoding="utf-8_sig"」
を追加。
動いた!(^o^)/ しかし、文章を覚えさせるほうでも同じ原因のエラーが(^^;。そこも修正。
 

20200508_AInanako01.jpg

 
本では、チャットボットのソースを解析しながらの説明(import、fromと__init__.py、ユーザー定義関数、while/continue/break文、オブジェクト指向、ファイル入出力、形態素解析、乱数、辞書型/タプル型、文字列操作、マルコフ連鎖等)が続きます。
 
 
この本のAmazonの書評はかんばしくありません。ソースをダウンロードして眺めるだけの本、という評もあります。
確かに、本を読んで書けるようになるための説明というよりは、チャットボットの仕組みをどんな風に実現しているか、という内容だと思います。でも、初心者向けのごまかし説明ではなく、けっこう真正面から説明していて、会話タイプの人工知能への最初のアプローチとしては、なかなかの本ではないかと思います。
少なくとも僕は、今はわからないところもあるけれど、後日、戻ってきて読み返したい、という気持ちになりました。
 
さて、明日は Django です。



以前に購入した「土日でわかるPythonプログラミング教室」を引っ張り出してきました。

形態素解析を使ったチャットボットプログラムが取り上げられている本です。一から組み立てるのではなく、Pythonのコードをダウンロードして動かしてみる、という内容です。

Pythonを学ぶというよりは、こんなこともできるのねー、ということを感じる本・・・かな。

土日で、とありますが、
・金曜日:環境構築
・土曜日:Pythonプログラミング
・日曜日:Webプログラミング
となっています。

 
 
*************************************************
■金曜日:環境構築
 
<本の内容>
「Docker Toolbox」と「Atom」をインストール。Atomを日本語化する。「Docker Toolbox」の「Kitematic」でコンテナを作る。
コンテナ内に同梱されている主要なもの:
 ・Python
 ・MeCab(形態素解析エンジン)
 ・Django(Webアプリケーションフレームワーク)
コンテナ内でターミナル使ったディレクトリの確認とDjangoの起動を行う。
 
・・・
 
説明は丁寧ですし、トラブらなければ難しくはないと思います。しかし、"土日でわかる"の前に金曜日でつまづく人が多数出そうではあります(笑)。

僕は、この先、Dockerが必要となりそうな予定はないし、今のWindows10+Anaconda+Pycharmに慣れたいところです。なので、Anaconda navigatorでDjango入れた仮想環境を作って、Pycharmでsの仮想環境を指定する方法でやってみようと思いました。
違いは、DockerがPC内に別の仮想PCを用意する(この場合、WindowsPC内にLinuxのPCを作る)ものであるのに対して、Anaconda navigatorは同じPC内でプログラミングを行う仮想環境(Pythonのバージョンが違うものを使うとか、必要なライブラリが異なるとか)を用意するもの、ということになります。

たぶん(笑)

こうした違いを乗り越えること自体が、とても良い経験になります。
 
さっそく、Anaconda navigatorで仮想環境を・・・あれ?今までの仮想環境とは別のディレクトリにできてしまいました。
これまでは、たまたま、Pycharmからconda指定して仮想環境を構築してばかりだったので気づかなかった(^^;
仮想環境をAnaconda navigatorで作る場合でも、Pycharmで作る場合と同じディレクトリはにしておくことにしました。
ここでググって
ーーーーーーーーーーーーーーーーーーーーーー
開発メモ その127 Anaconda navigatorの仮想環境のディレクトリを変更する
https://taktak.jp/2018/07/21/3094
ーーーーーーーーーーーーーーーーーーーーーー
を参考に
1).condarc を開く。
2)下記の記述を追記する。
envs_dirs:
- /Users/nolan/newpath(←ここはディレクトリを書く)

これで、Anaconda navigatorでもPycharmででも同じディレクトリに仮想環境ができるようになりました。
 
次は、MeCabです。
これもググって
ーーーーーーーーーーーーーーーーーーーーーー
Windows環境のPython3でMeCabを使ってみよう
https://www.gis-py.com/entry/mecab
ーーーーーーーーーーーーーーーーーーーーーー
を参考に
1)Windows環境にMeCabをインストール
2) 先ほどのAnaconda navigatorで作った環境でPycharmでプレジェクトを作る
3) PycharmのTerminalで
pip install ipykernel

pip install mecab-python-windows
を実行する。
4) (MeCabのインストール先)/bin
にある"libmecab.dll"というファイルを
(Pyhthonのインストール先)/Lib/site-packages
にコピーする。
5)サンプルプログラムで動作確認

これで、僕のPCでMeCabが使えるようになりました。
上記の参考サイトのほか、
PythonでMeCabを利用する方法を現役エンジニアが解説【初心者向け】
https://techacademy.jp/magazine/22052

MeCabで遊んでみる。すぐ使えるコードあり。
https://note.com/yuhyuh/n/ne6819dcfad0e
などが参考になると思います。
 
これで「金曜日:環境構築」は終了しました。

 



日経ソフトウェアの付録「5日でできる!Pythonでゲーム作成入門」の最後の章、「シューティングゲーム」が完成しました。これまた、ちょっとだけ、改造しています(^^;

Pygame Zero というゲーム用ライブラリの入門ではありましたが、ちょっとしたアクションゲームなら、こんなに気軽に作れるんだなぁという驚きがありました。
Pythonそのものの学習にはならなかったかもですが、なかなか楽しかったです。

 

さて、次は、何を使ってみようかな。



日経ソフトウェアの付録「5日でできる!Pythonでゲーム作成入門」から、「月面着陸ゲーム」が完成しました。ちょっとだけ、改造しました(^^;



前回書いたように Pygame Zero というゲーム用ライブラリを使っています。

Pygame Zero を使えば、簡単なゲームであれば、

--------------------------------

import pgzrun          # Pygame Zero のインポート

WIDTH = xxx           # ゲーム画面の幅
HEIGHT = xxx           # ゲーム画面の高さ

def draw():            # 画面描画が必要な時に呼び出される

def update():          # 1秒間に60回呼び出される

pgzrun.go()            # 実行

--------------------------------

というシンプルな構成で、メインループなしでゲームが作れます。
詳しくはhttps://pygame-zero.readthedocs.io/ja/latest/ を参照してください。Scratch と Pygame Zeroのプログラムは、よく似ているそうです。

 


使うかどうかわからないけど、使えるときには使いたい、というわけで、「zoom 背景 まとめ」でググって、公式に配布されてる画像をダウンロードしていたのですが、、、
 
ちなみに、充実してるのが、CNET Japan「Zoom会議などで役立つ無料の「バーチャル背景」まとめ--ジブリやケンタなど(随時更新)」 https://japan.cnet.com/article/35152367/ かな。
 
 
で、
 
 
WindowsPCなのですが、TwitterのJPEG画像を保存すると現象が発生。
 
・2年くらい前のOSアップデーのあたりから発生している不具合らしい・・・
 
・修正するためには、
  レジストリエディタを起動して、
  HKEY_CURRENT_USER\Software\Classes\MIME\Database\Content Type\image/jpeg を探し、
  Extensionの値のデータを、.jfif から .jpg に書き換えれば良い。
 
・すでにダウンロードしてしまったファイルは、拡張子を .jfif から .jpg に変更すれば良い。
 数が多い場合は、「こまったー」 https://apicodes.hatenablog.com/entry/JFIF で紹介されてたバッチ処理が楽です。
 バッチファイル内容は「ren *.jfif *.JPEG」
 拡張子 .bat をつけて、 .jfif のあるフォルダ内に保存し、ダブルクリック。
 
 
バッチ! .bat!
Windows3.1くらいまでは、autoexec.bat ってのをいじったなー。
 
.jfif ファイルは10個くらいだったので、手作業で拡張子を直してもよかったのですが、なんか懐かしくて、「ren_jfif_jpg_convert.bat」とかいう立派な名前を付けて保存し、実行しました(^^)。
 



Python ふたたび

| コメント(0)

コロナウイルスの影響で、会社は休業(必要なら原則テレワーク)。年度の切り替わりの組織改編対応が続きましたが、ひと段落(のはずなんだがなぁ^^;)

なので、ここはひとつ、2017年8月以来、手が付けられていなかったPythonふたたび。

前回2017年の時には、日経ソフトウェアの付録「日経平均株価をスクレイピングしよう 5日間で学ぶプログラミング Python編」「Python+便利ツールで実践! 5日間で学ぶスクレイピングのキホン」という、超基本とスクレイピングが題材でした。

今回は、日経ソフトウェアの付録なのは同じですがPygeme Zeroというゲーム用ライブラリを使う「5日でできる!Pythonでゲーム作成入門」です。

 

■開発環境など

・Windows10デスクトップPC
 Linux(Ubuntsu)でのいいかなと思ったのですが、慣れないLinuxだと何かうまくいかない時の対応が私には難しいのでWindows10にしておくことにしました。

・アナコンダ & パイチャーム
 前回は、PythonインタプリタとかATOMとか、付録テキストに書いてある内容そのまま、特に開発環境は意識していませんでした。今回の本もそんな感じですが、他にもいくつか本があり、それぞれ開発環境が異なっていて面倒なので、デファクトスタンダードなやつで。

・アドバイザー
 プログラマのカミさん。

 

■とりあえず、なんかできた。

迷路の中のキャラをカーソル使って動かしているだけですが(^^;

 

以前も書いたように、まっとうなプログラミング経験は学生時代のN88-BASIC以外にはないに等しいのですが、PythonはBASICで遊んでいた感覚で使えそうな気がしています。

作りたいものとしては、お気楽ゲームに、お気楽人工無能、単純仕事の自動化。

 



Pythonへのとっかかり

| コメント(0)

バイオリンのほうではいろいろと個人的に残念なことがあったのではありますが、気を取り直して。

まっとうなプログラミング経験はN88-BASIC以外にはないに等しい自分ですが、プログラミングの楽しさは知っています。

ということで、この夏休みに、最近興味の出てきたPythonをかじってみることにしました。

Pythonを選んだのは、人工知能の開発にも使われるものでありながら、いわゆる学習コストが低いとのことなので。

「Pythonの学習コストが低いという話」
http://qiita.com/karashi39/items/1a2514829f4249a4cefc
や、そこにあるリンク先のようなところを参考にしました。

帰省先に持ってきたテキストは、
・日経ソフトウェア2017年6月号付録
 「日経平均株価をスクレイピングしよう
   5日間で学ぶプログラミング Python編」
と、その続編の
・日経ソフトウェア2017年9月号付録
 「Python+便利ツールで実践!
   5日間で学ぶスクレイピングのキホン
です。

20170813KIMG0833.jpg

とっかかりとしては、こんなもんでいいかなと。
合計10日間を2日間で通過しました。


「5日間で学ぶプログラミング Python編」

1日目 初めてのPython
・Part1 Pythonはじめました
 →Pythonのインストール。なんとなく64ビット版じゃなく32bit版にしておく。テキスト余談の昔話として書いてある「紙テープ」は僕も使ったことない(見たことはある)けれど、1行1枚のマークシートでの入力は大学の授業で1回だけやったなー(FORTRAN)。
・Part2 計算してみよう
 →インタプリタ直接入力で。print関数、四則演算。0.1+0.1+0.1=0.30...中略...04になるよ等。あ、ここには書いてないけどデータ型の宣言はいらないのか。
・Part3 数値と文字列
 →「'」か「"」でくくる。str関数、文字コード。
・Part4 入力してみよう
 →input関数、変数の名前のルール(大文字と小文字は区別されるなど)、int関数。

 ★ついでに調べると、関数内で参照されるだけの変数は暗黙的にグローバル。関数の本体のどこかで値が変数に代入されたなら、それは明示的にグローバルであると宣言されない限り、ローカル。

2日目 制御文と関数
・Part1 if文と比較演算子
 →if文、インデントによる「ブロック」、比較演算子、if else文。
・Part2 論理演算子
 →and、or、not、True、False。
・Part3 while文
 →while文、break、continue。
・Part4 関数の定義
 →ATOM(エディタ)のインストール、Pythonモード。.pyファイルでの足し算の実行、format関数、return文。

※コーディングスタイル
 ・インデントは空白4つ。タブは使わない。
 ・ソースコードの幅は79文字を超えないように行を折り返す
 ・コードブロックの区切りに空行を使う。
 ・コメントは行に独立で書く
 ・演算子の前後とコンマの後には空白を入れる。括弧類のすぐ内側には空白を入れない。

 ★分岐とループと関数(サブルーチン)。昔ながらのフローチャートを思い出す。ここいらあたりは文法的な書き方が少し違うだけで基本は変わらない。インデントによるブロックは、インデントでソース見やすくするのが好きな自分には向いているかも。

3日目 Pythonのデータ型
・Part1 リスト
 →配列なんだが、appendメソッド、insertメソッド、removeメソッドで要素数の変更ができる。len関数、変数に代入されているのはリストオブジェクト自体ではなくリストオブジェクトの参照値(なんのこっちゃ)。
・Part2 リストの便利な機能
 →whileで回して、countメソッド、for文、スライス、inキーワード、sortメソッド、reverseメソッド。
・Part3 タプルと集合
 →要素の値を変更できない、要素無しまたは1つの時はカンマが必要、del文、可変長引数、集合(同じ値を持てない、順番がない)、set関数、集合演算。
・Part4 辞書
 →要素が、key:valueの組み合わせでできている、要素の追加にメソッドを使わなくていい、dict関数でも作れる、内包表現、、、、、、

 ★タプルとか辞書とか僕には新しい。配列使ってのいろいろって、とても楽になってるんだろうなぁ。
 仮面ライダータプル:ガイアメモリの値は変更できない。可変長引数によりガイアメモリがいくつあっても大丈夫・・・いえ、なんでもありません。

4日目 クラスとモジュール
・Part1 オブジェクト指向
 →オブジェクト:
   データ(昔で言えば変数)=属性
   処理(昔でいえば関数)=振る舞い
 オブジェクトはクラス(「型」)から生成される。
 クラスから生成されたオブジェクトはインスタンスという。
・Part2 クラス・継承
 →仮に、オブジェクトは一つでいいのなら、
  クラス名.変数名
  クラス名.メソッド名()
 になるが、
 インスタンスメソッドに引数selfを
 ・・・とか言ってるうちに、何?コンストラクタ(__init__メソッド)とか?
・Part3 例外
 →tryブロック、exceptブロック、elseブロック、finallyブロック。これはわかりやすい。
・Part4 モジュール
 →import文で取り込んで、モジュール名.関数名()で呼び出す。これもわかりやすい。

 ★オブジェクト指向は、日本語の本が出始めた頃にちょっとだけかじったけど、その概念自体がよくわからんのよなぁ。でも、手軽にプログラミング遊びをしたいだけなので、今のところは便利なモジュールの使い方がわかれば良いのだ(^^;

5日目 スクレイピング
・Part1 eメールの基礎と準備
 →クライアントとサーバー、プロトコル、SMTP、POP3、IMAP4、というものがあり、プロトコルを利用する。ここでは、Gmailを利用する。
・Part2 Pythonからメールを送信
 →必要なモジュールをimportして(パッケージから必要なものだけというのもあるのか)、書いてある通りにして成功。本文の改行はどうするんだろう(^^;
・Part3 Webサーバーと通信
 →Webページから画像ひとつをダウンロード成功。例はPythonサイトからPythonのロゴだったけど、勤め先サイトのロゴにしてみた(^^; 同じファイル名だとどんどん上書きされる(^^;
・Part4 外部ライブラリを使う
 →例は、Yahoo!ファイナンスの日経平均株価の情報を取り出す。外部モジュールbeautifulsoup4をpip3でインストール。アンインストールするときはどうするんだろう・・・調べてみると、installをuninstallと書けばいいらしい(^^; しかし、今日は値動きがないから、何度取りに行っても同じ数字(笑)

 ★続編に続く。

「5日間で学ぶスクレイピングのキホン」

1日目 Webの基礎
・Part1 Webサーバーを起動しよう
 →PythonにはWebサーバーのモジュールが標準装備、しかし、書いてある通りに入力するとエラーが出る。
「へたっぴpythonista」というブログの
  http.serverが起動しない・・・
  http://hetapy.hatenablog.com/entry/2013/12/23/131356
 と同じ症状で
  サーバー起動しました!
  http://hetapy.hatenablog.com/entry/2013/12/23/141337
 で解決。ありがとうございます。
・Part2 WebサーバーとHTMLの関係
・Part3 HTMLの基礎
・Part4 tableタグ

 ★HTMLはここに書かれてることくらいはわかるから省略。

2日目 cssとJavaScript
・Part1 cssとは
・Part2 cssのセレクタ
・Part3 JavaScriptとは
・Part4 関数とイベント

 ★cssはここに書かれてることくらいはわかるから省略。JavaScriptで関数、あー、一時期面白がってやったけどもう覚えてないや(^^; でも調べながらなら何とでもなるだろうから省略。

3日目 フォームと正規表現
・Part1 フォーム
・Part2 formの入力をPythonで受け取る
・Part3 正規表現で入力チェック

 ★フォーム、すっかり忘れてるけど、これも何とかなるから省略。そうか、サーバーでPythonが動くのならPythonで処理できるんだ(ブログ書いているレンタルサーバーはPython使えると書いてあったはず。ラッキーかも)。正規表現も、秀丸でテキスト置換するときに少し使ってるので、何とかなるから省略。

4日目 Seleniumで自動化
・Part1 Seleniumとは
・Part2 Selenium IDE
 →Firefoxに「Selenium IDE」をアドオン・・・と思ったら、This add-on is not compatible with your version of Firefox. でしたわ(笑)。
・Part3 PythonからSeleniumを使う
 →pipでSeleniumモジュールをインストール、geckodriverをダウンロードしてpathの通るところに置き、Pythonインタプリタからブラウザの起動、Googleページの表示、検索キーワードの入力、クリックイベントを発生させる、ところまで。

 ★ブラウザをリモートコントロールしてるみたいでおもしろーい(笑)

5日目 Pythonでスクレイピング
・Part1 正規表現でスクレイピング
・Part2 beautifulsoup4とXPathを使う
・Part3 Seleniumとの連携

 ★ページをダウンロードして、そこから必要な個所を切り出す方法のいろいろ。

最後に、スクレイピング自体は違法行為ではないけれど、サイト運営者に迷惑とならない範囲で、という注意があって、テキストはおしまい。

お疲れさまでした。


やっぱり、プログラミングは、習うより慣れろだなぁ。
やりたいことはあるので、やってみょう。
なにかできたら、やらかしたら、また書きます。



このアーカイブについて

このページには、過去に書かれた記事のうちプログラミングカテゴリに属しているものが含まれています。

前のカテゴリは分解組立修理などなどです。

次のカテゴリはMovableType/CMS関連です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。