2009/04/25
「hrkt0115311の、迷えるプログラミング教室」Vol.88 ~HTMLの部分置き換えスクリプトの巻~
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 「hrkt0115311の、迷えるプログラミング教室」Vol.88 ━━━━━━━━━━━━━━━━━━━━━━━ HTMLの部分置き換えスクリプトの巻 おはようございます。今回も、Pythonでテキスト処理を行うスクリプトをお届けしますね。 メルマガを登録して下さってる方、それからLDRに登録して下さってる方、 初心者のメルマガにおつきあいいただきありがとうございます。 http://www.mag2.com/m/0000267290.html http://reader.livedoor.com/about/http://archive.mag2.com/0000267290/rss10.xml では、今号をお届けいたします! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ○目次 ・テキスト処理でしたいこと ・まずは複数行を変数にきちんと格納できるか確認 ・基本的な処理を行えるように上記を改造 ・ダブルクリック一発でスクリプトが走るように工夫 ━━━━━━━━━━━━━━━━━━━━━━━━━━━免責事項 ソースコードは、発行者が実際に動かし、構文チェックなどもしていますが ご利用になられて万一損害が生じた場合、保証することができません。 ご利用になられる際は、ご自身でご確認になられた上で、お試し下さい。 ━━━━━━━━━━━━━━━━━━言語処理系等の導入について Perl,PHP,Python,Rubyの入手先と、XAMPPの入手先を紹介します。 ○The Perl Directory - perl.org http://www.perl.org/ ○日本PHPユーザ会 http://www.php.gr.jp/ ○Python Japan User's Group http://www.python.jp/Zope/ ○Ruby Install Guide http://preview.tinyurl.com/4ghc3o ○XAMPP http://www.apachefriends.org/jp/xampp.html ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ○ テキスト処理でしたいこと ・ナリ語フィルタを作成したナリ - 迷い楽しむプログラミング - EPG http://enjoy-programming.g.hatena.ne.jp/hrkt0115311/20080723/narinari 去年、Rubyで書いたスクリプトと仕組みは同じ、「置き換え」をPythonで行いました。 はてなダイアリー以外でも、はてな記法を使いたいと思い、 以下のような工夫をしています。 ・その後の、どんなジレンマ はてなダイアリーをはてな記法エディタとして使う方法 http://hrkt0115311.blog10.fc2.com/blog-entry-2670.html 例えば、はてな記法で以下のように書くと、HTMLソースは―― id:hrkt0115311:detail [http://d.hatena.ne.jp/hrkt0115311/20090125/1232869983:title:bookmark] [f:id:hrkt0115311:20090422130228j:image:w350] 下記のようになります。 ------------------------------------------------------------------------------- <div class="section"> <p><a href="http://d.hatena.ne.jp/hrkt0115311/" class= "hatena-id-icon"><img src="http://www.hatena.ne.jp/users/hr/hrkt0115311/profil e_s.gif" alt="id:hrkt0115311" class="hatena-id-icon" width="16" height="16">id :hrkt0115311</a></p> <br> <p><a href="http://d.hatena.ne.jp/hrkt0115311/20090125/ 1232869983" target="_blank">「灰色の男たち」はもしかしたら僕らなんじゃなかろうか ?――『モモ』ミヒャエル・エンデ著 - どんなジレンマ</a><a href="http://b.hatena. ne.jp/entry/http://d.hatena.ne.jp/hrkt0115311/20090125/1232869983" class="http-b ookmark" target="_blank"><img src="http://b.hatena.ne.jp/entry/image/http://d.ha tena.ne.jp/hrkt0115311/20090125/1232869983" alt="" class="http-bookmark"></a></p> <br> <p><a href="http://f.hatena.ne.jp/hrkt0115311/2009042213 0228" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/im ages/fotolife/h/hrkt0115311/20090422/20090422130228.jpg" alt="f:id:hrkt0115311:2 0090422130228j:image:w350" title="f:id:hrkt0115311:20090422130228j:image:w350" c lass="hatena-fotolife" width="350"></a></p> </div> ------------------------------------------------------------------------------- メルマガ配信の都合上、改行しています。 「 class="http-bookmark"」とか不要なので、毎回秀丸エディタで空文字で置き換えて 削除しています。繰り返し行う処理なので、スクリプトにしちゃおうと思いました。 また、「読むcrossreview ( http://hrkt0115311.tumblr.com/ )」を更新する際にも 似たような作業が必要なので、この処理も含めてスクリプトを書きました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ○ まずは複数行を変数にきちんと格納できるか確認 #-*- coding:shift_jis -*- import re #一つの変数に改行を含んだ文字列を与えて格納できたか確認するスクリプト s = ''' <div class="section"> <p><a href="http://d.hatena.ne.jp/hrkt0115311/" class="h atena-id-icon"><img src="http://www.hatena.ne.jp/users/hr/hrkt0115311/profile_s. gif" alt="id:hrkt0115311" class="hatena-id-icon" width="16" height="16">id:hrkt0 115311</a></p> <br> <p><a href="http://d.hatena.ne.jp/hrkt0115311/20090125/1 232869983" target="_blank">「灰色の男たち」はもしかしたら僕らなんじゃなかろうか ?――『モモ』ミヒャエル・エンデ著 - どんなジレンマ</a><a href="http://b.hatena. ne.jp/entry/http://d.hatena.ne.jp/hrkt0115311/20090125/1232869983" class="http-b ookmark" target="_blank"><img src="http://b.hatena.ne.jp/entry/image/http://d.ha tena.ne.jp/hrkt0115311/20090125/1232869983" alt="" class="http-bookmark"></a></p> <br> <p><a href="http://f.hatena.ne.jp/hrkt0115311/2009042213 0228" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/im ages/fotolife/h/hrkt0115311/20090422/20090422130228.jpg" alt="f:id:hrkt0115311:2 0090422130228j:image:w450" title="f:id:hrkt0115311:20090422130228j:image:w450" c lass="hatena-fotolife" width="450"></a></p> </div> ★このユーザーから購入する ★レビューする ★ * ★crossreviewから購入する ''' print s ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ○ 基本的な処理を行えるように上記を改造 #-*- coding:utf-8 -*- import re ''' 置き換えスクリプト。 日本語も処理するのでShift-jisではなくUTF-8で作成。 変数sに入れた文字列から、sub()メソッドで指定した文字列を 空文字に置き換えることで削除する。 注意点。Windowsのコマンドプロンプトでこのスクリプトを使うと コマンドプロンプトの出力結果が文字化けしてしまう。 (コマンドプロンプトがshift-jisだから) そのため、「python hoge.py > hoge.txt」といった形で テキストファイルに出力すると、自動的にUTF-8のファイルが 作成され、文字化けせずに済む。 ''' s = ''' <div class="section"> <p><a href="http://d.hatena.ne.jp/hrkt0115311/" class="h atena-id-icon"><img src="http://www.hatena.ne.jp/users/hr/hrkt0115311/profile_s. gif" alt="id:hrkt0115311" class="hatena-id-icon" width="16" height="16">id:hrkt0 115311</a></p> <br> <p><a href="http://d.hatena.ne.jp/hrkt0115311/20090125/1 232869983" target="_blank">「灰色の男たち」はもしかしたら僕らなんじゃなかろうか ?――『モモ』ミヒャエル・エンデ著 - どんなジレンマ</a><a href="http://b.hatena. ne.jp/entry/http://d.hatena.ne.jp/hrkt0115311/20090125/1232869983" class="http-b ookmark" target="_blank"><img src="http://b.hatena.ne.jp/entry/image/http://d.ha tena.ne.jp/hrkt0115311/20090125/1232869983" alt="" class="http-bookmark"></a></p> <br> <p><a href="http://f.hatena.ne.jp/hrkt0115311/2009042213 0228" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/im ages/fotolife/h/hrkt0115311/20090422/20090422130228.jpg" alt="f:id:hrkt0115311:2 0090422130228j:image:w450" title="f:id:hrkt0115311:20090422130228j:image:w450" c lass="hatena-fotolife" width="450"></a></p> </div> ★このユーザーから購入する ★レビューする ★ * ★crossreviewから購入する ''' #この部分で置き換えを行っている s2 = re.sub('<div class="section">', "", s) s3 = re.sub("\t", "", s2) s4 = re.sub("<p>", "", s3) s5 = re.sub("</p>", "", s4) s6 = re.sub("<br>", "", s5) s7 = re.sub(' class="hatena-id-icon"', "", s6) s8 = re.sub(' class="http-bookmark"', "", s7) s9 = re.sub(' alt=""', "", s8) s10 = re.sub(' class="hatena-fotolife"', "", s9) s11 = re.sub('</div>',"",s10) s12 = re.sub(' \* ',"",s11) s13 = re.sub('レビューする',"",s12) s14 = re.sub('このユーザーから購入する',"",s13) s15 = re.sub('crossreviewから購入する',"",s14) print s15 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ○ ダブルクリック一発でスクリプトが走るように工夫 #-*- coding:utf-8 -*- import re #ダブルクリックで処理できるように変更 #test.txtとこのスクリプトのファイルは必ずUTF-8で保存すること #変数sにファイルを読み込み f = open('test.txt','r') #読み込み専用モードでテキストファイルを読み込み s = f.read() #ファイル読み込み f.close() #変数sに対してsub()メソッドを行い、結果を次の変数snに返す s2 = re.sub('<div class="section">', "", s) s3 = re.sub("\t", "", s2) s4 = re.sub("<p>", "", s3) s5 = re.sub("</p>", "", s4) s6 = re.sub("<br>", "", s5) s7 = re.sub(' class="hatena-id-icon"', "", s6) s8 = re.sub(' class="http-bookmark"', "", s7) s9 = re.sub(' alt=""', "", s8) s10 = re.sub(' class="hatena-fotolife"', "", s9) s11 = re.sub('</div>',"",s10) s12 = re.sub(' \* ',"",s11) s13 = re.sub('レビューする',"",s12) s14 = re.sub('このユーザーから購入する',"",s13) s15 = re.sub('crossreviewから購入する',"",s14) #処理結果が入っている変数s15の内容をtest2.txtに書き出す f2 = open('test2.txt','w') f2.write(s15) f2.close() 以上のような流れで、このスクリプトを書きました。 なお、半角英数の場合はShift-jisで保存しても問題なく動きます。 しかし、日本語フォントも含む場合はUTF-8でファイルを保存しないと きちんと動かないです。 ■ 編集後記 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 自動化できるものは自動化すると勉強になるよ。そう教えてもらっても、なかなか 私の腕で自動化できることって少ないんですよね。今回作ったスクリプトは 単純なスクリプトですが、秀丸エディタで手作業で置き換えを指示していた時よりは 効率化できたと思います。 また、身近な課題を見つけたら、スクリプトにしてみますね。 それでは、次号でまたお会いしましょう。 ■ いただいた反響について ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 「こんな仕組み作れないかな」とか「説明不足で分からないよ」といったご指摘を お寄せいただけると嬉しいです。みなさまの声で、メルマガを育てていきたいです。 また、頂戴したメールをこのメルマガで紹介させていただくかもしれません。 もし、公開を望まれない場合は、恐れ入りますが、「発行者のhtkt0115311に読んで 欲しいだけで、メルマガには掲載しないで」などとお書き下さると助かります。 ■ 転送や再配布について ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ このメルマガをご紹介いただく際は、 このメルマガのURL http://www.mag2.com/m/0000267290.html などを 並記し、私の書いた文章であると分かる形にして下さると幸いです。 メルマガの転送については、転送者さん・転送されたメールを受信される方に 迷惑でない範囲であれば歓迎いたします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ メールマガジン「hrkt0115311の、迷えるプログラミング教室」 ○発行者 htkt0115311(どんジレ) ○発行システム 『まぐまぐ!』 http://www.mag2.com/ ○配信中止はこちら http://www.mag2.com/m/0000267290.html ○公式サイト http://enjoy-programming.g.hatena.ne.jp/hrkt0115311/ ○blog http://hrkt0115311.blog10.fc2.com/ ○Twitter https://twitter.com/hrkt0115311 ○はてなハイク http://h.hatena.ne.jp/hrkt0115311/ ○Wassr http://wassr.jp/user/hrkt0115311 ○お問い合わせ enjoy.ruby@gmail.com ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
2009/08/27 「hrkt0115311の、迷えるプログラミング教室」Vol.91 ~htmlSQLで「みそ録」作ったよ! の巻~
-
2009/07/19 「hrkt0115311の、迷えるプログラミング教室」Vol.90 ~URL指定すると、はてな記法を返すスクリプトの巻~
-
2009/07/13 「hrkt0115311の、迷えるプログラミング教室」Vol.89 ~XML処理するTwitterまとめスクリプト改編の巻~
-
2009/07/13 「hrkt0115311の、迷えるプログラミング教室」Vol.89 ~XML処理するTwitterまとめスクリプト改編の巻~
-
2009/04/22 「hrkt0115311の、迷えるプログラミング教室」Vol.87 ~HTMLからURLを引っこ抜いてますの巻~



