python
10章の内容は「デバッグ」で、大いに勉強になった。演習プロジェクトは、バグを含むプログラムをデバッグするというもの。 入力させる値が'表'と'裏'なのに対してプログラム内部では'1'と'0'になっており、入力内容を判定できなくなっていたため、'表'と'裏'…
間が空いてしまった。9章の演習プロジェクトは1週間前にやっていたのだが、3つめの演習がすぐには解けずにそのまましばらく放置していた。 これではいかん。とにかく解けるものを解いて先に進みたいので、3つめは後で戻ってきて解くことにする。 1つめは「選…
8章に入って、いよいよ扱うプログラムが実践的になってきた。学習したことを応用していろいろ作れそうだ。 8章の演習プロジェクトは3つあって、まずは本に載っている「マルチクリップボード」に削除機能を追加するもの。これは簡単だった。 第1コマン…
『退屈なことはPythonにやらせよう』の7章に、クリップボード内のテキストから(電話番号や)メアドを検索して抜き出す方法というのが載っていた。 サイト上に載っているメアドはスパム避けのために@が[at]などに置き換えられていることも多いので、そういっ…
7章の演習プロジェクトは、正規表現を使った2つで、まずは「強いパスワードの検出」。 これは、最初にパスワードの強さテストを1項目ずつやっていく上のプログラムを書いた後でなんかこれだとダサいなと思い、少し調べた上で正規表現の「先読みアサーション…
6章の演習プロジェクトは、リストを内包したリストを右揃えのテーブルとして表示させるプログラム。 右揃えの準備として、まず最初にリスト(外側)の長さぶんの0のリストを作り、その0をそれぞれ各リスト(内側)の最大長の値で置き換える。 これは本に載っ…
5章の演習プロジェクトは、与えられた辞書形式のデータを「持ち物リスト」として表示するプログラムと、別のリストからその辞書にアイテムを移して辞書を更新するプログラム。 setdefault()メソッドは、第1引数で指定したキーが辞書に存在するかどうかを調べ…
4章の演習プロジェクトは2つある。 まず、「カンマ付け」。 これはforループを使わずにカンマ区切りでjoin()する方がシンプルで良いな、と思ったので改良版を作った。 そして、「文字絵グリッド」。 こっちは、本当は与えられたリスト内リストの長さが均一か…
Scrapyのチュートリアルが動かなかったりして心が折れている間に、『退屈なことはPythonにやらせよう』というPythonの人権を無視したタイトルの本を買って、勉強の寄り道をし始めた。 日々の雑務の自動化とPythonの理解を深めることが同時にできれば素晴らし…
以前、使用しているMacのAnaconda環境でScrapyのチュートリアルが動かないという事態になったため、いっそ仮想環境化も含めてPythonの環境構築をやり直すことにした。 以下、Mac OSXでの環境構築のメモ。 Anacondaをアンインストールする https://docs.conti…
Pythonには、文字列操作に便利なメソッドが用意されている。以下のメソッドはそれぞれ、文字列が isalpha():1文字以上の英字のみによる文字列かどうか isalnum():1文字以上の英数字のみによる文字列かどうか isdecimal():1文字以上の数字のみによる文字列…
Pythonのリストや辞書では、それらへの「参照」が変数に格納される。 mame = 3 uma = mame mame = 6 とした場合は、mameに代入された値3がumaにコピーされ、その後でmameに別の値6を代入してもumaの値3は変わらない。 mameとumaは異なる値を格納する異なる変…
『PythonによるWebスクレイピング』には、 残念ながら、Scrapyは、Python2.7では動きますが、Python3.xバージョンはまだリリースされていません。 と書いてあり、ウワアめんどくせえ、これが複数バージョンのPythonを仮想環境で分離するとよいと…
urllib.parseのurlparseを使うと、受け取ったURLを解析して分解したり、組み立て直すことができる。 urllibについては、本の冒頭で「繰り返し出てくるからドキュメントを読んでおけ」とあったとおり、細かい部分は一切説明がないので、メモしておく。 scheme…
Wikipediaの日本語URLのエスケープの件でハマったり、『PythonによるWebスクレイピング』を細かい部分まで噛み締めて読み進めようとすると、なんだかいちいちつまずいてしまう。もしかしたら、何かもう少しやさしい参考書を読んだ方がよいのではないか?とい…
BeautifulSoupのドキュメントの中で、classがPythonの予約語であるためclass_という名前で代用する、というのが出てきたが、これはPythonのコーディング規約であるPEP8の中の 関数の引数名が予約語と衝突していた場合、アンダースコアを引数名の後ろに追加す…
Pythonでは、関数内でグローバル変数に値を代入する場合はglobal宣言を使う必要がある。たとえば a = "何か" def local(): a = "別の何か" print(a) local() print(a) とした場合、local()は"別の何か"を出力する(関数内のaはローカル…
BeautifulSoup4のメソッドfind()とfind_all()について、ちゃんとごまかさずに理解しておかないと後々困りそうな気がした。 せっかくなので、ドキュメントの該当部分をちょっと自力で訳してみて知識を定着させようと思う(以下訳文)。 ツリーの検索 Beautifu…
本の中で、課題としてWikipedia(英語版)を使ったものが出てきたので、日本版Wikipediaに置き換えてやってみようと思ったところ、URLに日本語が含まれているせいでUnicodeエンコードエラーが起きた。 ググったところ、先人の知恵があったので試してみたが、…
正規表現だけでなく、ラムダ式を使うのもスクレイピングに役立つ。後で勉強すること。
正規表現には苦手意識があった。正確には苦手というより憶えるのが面倒臭く、必要になる場面ではそのたびごとにググって調べ、すぐ忘れてしまう、というパターンである。ただ、人生のこのタイミングでがっつりPythonを学習するにあたって、さすがに避けて通…
スクレイピングで要素を取得する際に、cssのclassが有効活用できる。 たとえば、このブログ(現状ではWordPressのTwenty Fifteenテーマをそのまま使っている)の記事タイトルだけを抜き出したい場合には、 <h2 class="entry-title"> <a h…
本の中で、スクレイピング対象のデータフォーマットがひどかったりしてスクレイパーがエラーを起こして止まったときなどに、 Webサイトを作った開発者の名前を(それからおかしなフォーマットも)呪いたくもなるでしょうが、本当に腹が立つのは、そもそもそ…
Pythonのオブジェクトのひとつにタプル(tuple)があり、これは複数の要素の組み合わせをひとつのものとして扱える。具体的には、座標とかを (0, 100) のように、コンマで区切り丸括弧で囲んで作る。シーケンス型であり、インデックスで値を取り出せる。後か…
Macの場合、 $sudo easy_install pip でPythonパッケージマネージャーpipをインストールした後 $pip install beautifulsoup4 でBeautifulSoupをインストールする。らしいのだが、自分の環境には既にAnacondaが入っていたので、 Requirement already satisfie…
urllibは『PythonによるWebスクレイピング』のいろんな場面で使うので、ドキュメントを読んでおくといいらしい。 本の中のURLは英語版だったので、日本語版にリンクを張っておく。本当は英語版で読む習慣をつけたほうがいいんだろうけど。
Pythonには内包表記(comprehension)という書き方がある、というのをcodeacademyのPythonコースで知ったわけだが、これはコードが簡潔になるばかりではなく処理も速くなるらしい。処理が速くなる理屈については正直今の自分のレベルではチンプンカンプンな…
ちょっと前から、情報収集にWebスクレイピングを導入したいなあとボンヤリ考えていたのだが、何を使って実践しようかなと検討していたところ、どうやらO'Reillyから去年出た『PythonによるWebスクレイピング』という本がとても良いらしい、というのを知った…