のほほんのおと

IT系、音楽、映画、旅行などなど。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【RICOH THETA】 THETAのサイトにUPした画像データのセキュリティについて調べてみた

360度撮影可能な全天球型デジカメ「RICOH THETA」についての話しっす。
THETAのサイトにUPした画像は誰が見れるの?という疑問について調査してみたよ。

【 経緯 】

THETAを買い、RICOHの公式サイトにもデータをUPして表示させ、人に見せてウケて喜んでいた時のことだ。
ふと気になった。
このサイトにUPしたデータって誰が見れるんだろう?
ログインしているオレだけと考えていい?それともどっかからか丸見えになる?

それに、FacebookやTwitterでシェアする機能もあるけど、それは?
Facebookの投稿自体はFacebookの公開範囲になるだろう。
でも、Facebookの投稿はあくまでRICOHのサイトにUPしたものを参照しているに過ぎない。
その場合、何がどうなる?

そう考えてみたら、「URLがバレたら誰からも丸見えになりそうな?」という気になってきたのだ。

バレて見られて困るようなものはまだUPしてない。
でも、今後、色々な人一緒に居るときに撮ったのをUPし、みんなで共有してぜひ盛り上がりたいところだ。
その際にやっぱり気になるのは「個人情報」といったところだろう。
オレはあまり気にしないけど、人によっては気にするだろうし。
その際に自信を持って「大丈夫っす」と説明できないと困るなぁと。

と言うことでちょっと調べてみることにした。


【 問い合わせ 】

リコーイメージング株式会社さんに問い合わせをしてみた。
回答は大筋では予想通りだったけど、ちょっとびっくりがっかりな話しもあったよ。

もらったメールを丸っと載せるのは避けてオレの言葉で整理すると以下みたいな感じです。

1. 公開範囲制御の機能は無い。URLが分かれば丸見え。
URLの形式は「https://theta360.com/x/yyy」。

ま、GoogleのPicasaのWebアルバムみたいなもんですな。
ここまでは予想の範囲内。

2. ユーザIDが分かると誰でも一覧が見える。
URLの形式は「https://theta360.com/users/ユーザーID」。
一覧が見えれば1のURLも分かるので、丸ごと見える。
ただし、一覧を出すかどうかの制限をすることはできる。

この辺から「ん?」という感じになってきましたな。

3. Facebookへの投稿はFacebookでの公開範囲での制御となる。
ただし、その投稿から分かるURLが漏れれば誰からでも丸見え。

ま、これも予想通りかな。

気になったのは1にあるURLの単純そうなフォーマット。
あと、「IDが分かったらデフォルトの設定ではほぼアウト」ということ。


【 調査、実験 】

ということで心配するほどのことか、気にするほどのことじゃないのかもー少し調べてみることにしたっす。

オレのIDを仮に「XXXX」として以下にアクセスしてみた。
「https://theta360.com/users/XXXX」
うむ。見える。
THETAサイトをログアウトした状態で同じようにやってみた。
つまり、オレじゃない人がアクセスするとどうなるか、だ。
うむ・・・丸見えだ・・・なるほど。

ではユーザIDのところを適当に入れたらどうなる?という実験。
とりあえず1桁から試した。
いきなりヒットした・・・見知らぬ方の結構プライベートっぽい画像がまるっと出てきた・・・
結婚式だか披露宴だかで盛り上がっている風のだ。
うーん、考え物だ・・・

その他適当に桁を変えてそれこそ適当なIDを入れたが、結構簡単に出てくる。
どうやら1から単純に連番でIDを発行している様子・・・
ちなみにオレのIDの±1のも試したが・・・だったよ。

次に気になるのが画像本体のURLが結構単純なフォーマットに見えることだ。
https://theta360.com/x/yyy
Picasa並に複雑なURLだったら「ま、いっか」となったのだが・・・

自分のも含めて見えてしまった人達のところからたどり、URLをチェックしてみた。
たまたまかもしれないけど「x」のところは全員「s」だった。
で、「yyy」のところは英字の大文字小文字と数字だった。

3桁の英字の大文字小文字と数字の組み合わせって何通りあるんだろう?
数学をきちんと勉強しておけば良かったとたまに思うっす。
でも、大したことないはずだなぁ・・・

それにそもそもユーザIDでリストが丸っと見えたらその時点でアウトなんだしぃ~。
ユーザIDは単に1からの連番みたいだしぃ~。

ちなみに「ユーザ本人以外にはリストが出ないようにする設定」も試した。
  1.  ログインする。
  2.  プロフィール画面の「メニュー(歯車のアイコン)」->「ユーザー設定」へ
  3.  「投稿された全天球イメージの一覧表示」で、「一覧表示OFF」を選択する。
この状態でログオフしてからオレのIDのURLでアクセス。
「https://theta360.com/users/XXXX」
すると一覧が出ていたところには「投稿された全天球イメージの一覧表示はOFFになっています。」と出ていた。
なるほど。一筋の光明ですかな。
でもやっぱりオレのユーザ名は丸出しだったけどな。

ということで、あまり期待とは違う結果が出てしまった。
正直悩ましい・・・


【 検討、結論 】

色々と調べてみたが、どうなんだろう?
自分も含めて色々な人が写ったのをUPしても大丈夫か?
ハズカシイ画像とかはどうだ?

オレ個人のとりあえずの結論は以下としてみたっす。
1. 自分以外からのアクセス時のリスト表示はOFFる。
これは超マストな大前提ですな。

2. 他人に見られたらシャレにならないのは絶対にUPしない。
検証から分かるようにその気になれば結構簡単に見られてしまうので。

3. 人の顔などが写っているものの時はその人の許可を取る。
ごく無難なもののつもりでも嫌がる人は居るかもしれないので。

要するに「このサイトにはセキュリティは無い」という結論だ。
ま、セキュリティが高いとうたっているのに、実はゆるゆるだった、というわけではない。
もともとこういう設計だったのだろう。
だから文句を言っているわけではないし、RICOHをディスっているわけではないのでそこんとこヨロシクです。

とは言え、問い合わせないと分からんかった、というのはいかがなものかとは思ったな。
マニュアルとかもきちんと読んだつもりなので、多分簡単にアクセスできる公式情報には無いはずなのだ。

こんなところですかな。

スポンサーサイト

【Windows】マウス/キーボードで「休止」から復帰しないようにしてみた

【 経緯 】

以下で自作デスクトップPCでも「休止」ができるようにした。
  【Windows】デスクトップPCでも「休止」したい
  http://nohohonnouto.blog136.fc2.com/blog-entry-8.html

これで便利になったな、と思ったのだが・・・
マウスやキーボードを触っただけで復帰してきやがるのだ。
寝てろっつーの!

というわけで調査、対応してみた。


【 環境 】

MS-Windows7 Professional Edition。


【 参考 】

スリープ(休止)状態をキーボード・マウスから復帰させないようにする
http://128bit.blog41.fc2.com/blog-entry-329.html


【 作業 】

以下へ。
  コントロールパネル > ハードウェアとサウンド > デバイスマネージャー >

以下をダブルクリックしてプロパティを開く。
  キーボード > HIDキーボードデバイス
タブ「電源の管理」へ。
で、「このデバイスで、コンピューターのスタンバイ状態を解除できるようにする」のチェックを外す。

同様の設定を以下にもやる。
マウスとそのほかのポインティングデバイス > HID準拠マウス

これで良し、と。

テーマ:Windows - ジャンル:コンピュータ

ウチのバックアップ環境構築

【 発端 : やっちまった! 】

先日、ヒヤリとしたことがあった。
自炊した本・雑誌・マンガのデータがわんさと入っているUSB接続外付けHDDの中身がスッカラカンになったのだ。でも、実際にデータが消えたわけではなく、PCをリブートしたらまた見えるようになり、ほっとした。
とは言え、バックアップの必要性を痛感させられた。もうDVD-Rなどではバックアップできるデータ量ではなくなり、バックアップそのものをすっかり諦めてからずいぶんと経つ。でも、さすがになんとかせねば、と。

そう思いつつもついつい面倒で後回しにしていた。
そしてつい先週、とうとう事件は起きた。

俺は「知子の情報」というソフトをずっと愛用している。「テキスト型データベース」というジャンルのソフトだ。
もうまったく新バージョンも出なくなり、すっかり古びているので乗り換えたいのだが、乗り換え先のいいソフトが無く、ずっと使っている。
このソフトに俺はとにかくなんでも入れていた。日々のどうでもいいメモ帳の転記から、銀行やら色々なWEBサービスのアカウント情報、マジメに色々と想うところ、Etc・・・

無論、このデータはお金を出しても二度と手に入れられるわけがない。そんな大事な代物。
それが先週、ぶっ飛んだ・・・
「知子の情報」がクラッシュした。それ自体はたまにあることなので、あまり気にせず、再起動。
でも、いつもと違った様子。なんと、データ数がゼロに・・・「体温がすっと下がる」という感覚を久しぶりに味わってしまったよ。
その後必死で修復を試みたが、戻らず・・・

その後、まだバックアップしていたころのデータファイルやDVD-Rやらなにやらを探した。いくつか出てきた。
それで復旧できたのが2009/06まで。現在、2012/08。実に約3年分のデータが吹き飛んでしまった・・・

泣こうがわめこうがもう消えたデータは戻らない。
危険な状態と分かっていながら、なんでバックアップをきちんとしようとしなかったのだろう?
面倒なのは確かだが、万が一のことが起きたらどうなるか分かっていたはずなのに?
多分、「今まで大丈夫だったし、ま、これからも大丈夫だろう」という正常化バイアスってやつがかかっていたのだろう。
万が一のことがあったらどうなるか分かっている、とは言いつつも、実はもうひと押し想像力が足りなかったのかもしれん。

さすがに今度の今度こそ本気で反省。
ということで、改めてバックアップ環境をマジメに作った、という話し。


【 バックアップ方針 】

DVDはもちろん、Blu-rayでも追いつかないデータ量だ。
だから、HDDからHDDのバックアップにする。
そしてバックアップ先のHDDはRADI1あたりでミラーリングしておく。
ここまでやっておけばまずひと安心だろう。
  • PC本体と普段使いの外付けHDD
  • バックアップ先HDDのRAIDの片側
  • バックアップ先HDDのRAIDのもう片側
これが3つがいっぺんにぶっ壊れるなんてことはそうそうあるまい。
もしそんなことがあったらもうなんか諦めもつくだろ、という感じだ。


【 ハードウェア 】

以下のNASをBICカメラで買ってきた。
  「BUFFALO LinkStation LS-WV4.0TL/R1J 4TB」    37500円

4TBなので、RAID1にすれば2TBになる。これだけあれば、ま、当分は大丈夫でしょう、と。


【 ソフトウェア 】

ファイルやフォルダ単位で同期してくれるソフトを使用することにした。
いくつか選定した結果「FreeFileSync」に決定。

公式サイト
http://sourceforge.net/projects/freefilesync/

紹介サイト
FreeFileSyncでファイル同期がこんなに簡単に。


【 データの優先度づけ 】

バックアップしたいデータと言っても色々と重要度は違う。
「知子の情報」のデータのように絶対に無くせないものもあれば、がっかりはするけど「ま、いっか」ですむものまで色々だ。
ということで、重要度によってレベル分けをしてみた。

以下みたいな感じ。
Level1  : 自分で作ったもの。無くしたら絶対手に入らないもの。絶対無くしたくないもの。
Level2  : 自分で作ったもの。無くしたら絶対手に入らないもの。無くしても諦めはつくもの。
Level3  : 自分で作ったもの。お金あるいは手間をかければ手に入るかもしれないもの。でも、大変。
Level4  : 自分で作ったものではなく、集めたもの。無くしたら絶対手に入らないもの。なるべく無くしたくないもの。
Level5  : 自分で作ったものではなく、集めたもの。無くしたら絶対手に入らないもの。無くしても諦めはつくもの。
Level6  : 自分で作ったものではなく、集めたもの。お金あるいは手間をかければ手に入るかもしれないもの。でも、大変。
Level7 :  自分で作ったものではなく、集めたもの。無くしても諦めがつくもの。


ちょっと細かくし過ぎた感もあるけど、この感じで手持ちデータを優先度づけした。
とは言っても全部、NASにバックアップするようにしてある。
ただ、今後の話しだけど、Level1、2あたりの重要度の高い奴はディザスタリカバリ(災害対策)を考えてクラウドにもバックアップするかもと考えている。その時のため用だ。


とりあえずここまでやってほっとひと息つけたところ。
それでも飛んだデータは戻らない。
後悔の想いがしばらく頭をグルグルグルグルしてたけど、後の祭りだ。
せめて今後の教訓としましょうかね。

テーマ:トラブル - ジャンル:コンピュータ

【Python】EmEditorでPythonマクロを動かすまで

EmEditorというエディタではマクロに色々な言語を使えるようになっている。
基本はVBScript,JavaScriptだが、それ以外にもPython,Ruby,Perlなどが使える。

今回は今勉強中のPythonをマクロとして使えるようにしてみたので整理する。

【 手順概要 】
  1. Python(CPython)のインストール
  2. Python for Windows extensions(PyWin32)のインストール
  3. レジストリ設定
  4. 動作確認

【 1. Python(CPython)のインストール 】

すでに入っている環境なので詳細は略。

PythonのバージョンはPython2.7を前提にする。
3.0系でもいけるかは不明。

【 2. Python for Windows extensions(PyWin32)のインストール 】

以下のサイトを参考にした。
  http://www.byjohndoe.com/contents/9
  EmEditorでPythonScriptを動かす場合にエラーが出たときの対処法

PyWin32の配布サイトへ。
  http://sourceforge.net/projects/pywin32/
  Python for Windows extensions

ここからが分かりづらいのだが、以下のようにダウンロードページにたどり着く。
  ・リンク「Python for Windows extensions Web Site」へ。
  ・リンク「download pages」へ。
  ・リンク「download area 」へ。
  ・リンク「pywin32」へ。
  ・リンク「Build216」へ。この時点の最新のビルド。

ダウンロード一覧にある以下を落とす。
  pywin32-216.win32-py2.7.exe
  
  「-py2.7」とあるのが「Python2.7用」ということらしい。

実行し、インストール。

インストール時、Pythonとして私の環境ではCPyhtonとActivePythonの2つを検出された。
CPythonの以下を指定する。
  Python Directory  :C:\Software\Python27\
  Installation Directory  :C:\Software\Python27\Lib\site-packages\

以下のように入った。
  Copied pythoncom27.dll to C:\WINDOWS\system32\pythoncom27.dll
  Copied pythoncomloader27.dll to C:\WINDOWS\system32\pythoncomloader27.dll
  Copied pywintypes27.dll to C:\WINDOWS\system32\pywintypes27.dll
  Registered: Python.Interpreter
  Registered: Python.Dictionary
  Registered: Python
  -> Software\Python\PythonCore\2.7\Help[None]=None
  -> Software\Python\PythonCore\2.7\Help\Pythonwin Reference[None]='C:\\Software\\Python27\\Lib\\site-packages\\PyWin32.chm'
  Pythonwin has been registered in context menu
  Creating directory C:\Software\Python27\Lib\site-packages\win32com\gen_py
  Shortcut for Pythonwin created
  Shortcut to documentation created
  The pywin32 extensions were successfully installed.

【 3. レジストリ設定 】

以下のPyWin32にあるスクリプトを実行する。
  'PyWin32インストール先'\win32comext\axscript\client\pyscript.py

参考サイトによると実行方法は以下の2つ。
  1. エクスプローラでダブルクリック
  2. コマンドプロンプトで実行
    ただし、コマンドプロンプトは管理者権限で。

私は「2. コマンドプロンプトで実行」でやった。

以下のように実行。
  C:\>python -V
  Python 2.7.2
  
  C:\>python.exe C:\Software\Python27\Lib\site-packages\win32comext\axscript\client\pyscript.py
  Registered: Python
  
  C:\>

複数のPythonのバージョンを入れているときは「python -V」でどれが動くか確認しておくが吉。

【 4. 動作確認 】

以下の内容のファイル「pysample.py」を作成。
  #language = "Python"
  # encoding: cp932
  
  text = Window.document.selection.Text.encode('UTF-8')
  Window.alert( text )

EmEditor上で適当に文字列選択をしておいてからこのマクロを実行。

アラートダイアログが出て、中に選択しておいた文字列が表示されたら、動作確認OK。

【 トラブル事例 】

この作業時、幾つかあったトラブルを事例として整理。

「 未設定時エラー 」

CPythonは元々入っていたが、PyWin32は入っていなかった。
その状態でPythonのマクロを実行すると出たエラーが以下。
  ---------------------------
  EmEditor
  ---------------------------
  Python
  指定された言語はシステムに登録されていません。
  ---------------------------
  OK
  ---------------------------

「 ActivePythonではダメ? 」

以下のサイトに代表されるように、ActivePythonを使う、という説明がネットには多い。
  http://emeditor.web.fc2.com/EmEditor_Macro_ActiveScript.html
  EmEditorのマクロを様々なActiveScriptで書いてみる

が、結論から言うとダメで、結局CPythonを使った。

ダメだった時にPythonマクロを実行すると出た2つのエラーが以下。
  ---------------------------
  Microsoft Visual C++ Runtime Library
  ---------------------------
  Runtime Error!
  
  Program: C:\Software\EmEditor\EMEDITOR.EXE
  
  R6034
  
  An application has made an attempt to load the C runtime library incorrectly.
  Please contact the application's support team for more information.
  
  ---------------------------
  OK
  ---------------------------
  
  
  ---------------------------
  EmEditor
  ---------------------------
  ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。
  
  ---------------------------
  OK
  ---------------------------

私と同じようにトラブり、CPythonを使うことで解決したという話しが以下。
ここを参考にして私も軌道修正した。
  http://www.byjohndoe.com/contents/9
  EmEditorでPythonScriptを動かす場合にエラーが出たときの対処法

「 ActivePythonアンインストールでPyWin32壊れた? 」

ActivePythonはやめて、CPythonを使うことにした。
で、不要なのでActivePythonをアンインストールした。
するとどうやらPyWin32の環境を壊すかなんかしたみたい。

それまで動いていたPyWin32そのものが動かないようになっていた。
  スタート > プログラム > Python2.7 > PythonWin

以下のエラーが出る。
  ---------------------------
  Python for Win32
  ---------------------------
  Still can't get my hands on win32ui
  ---------------------------
  OK
  ---------------------------

その状態で「 3. レジストリ設定 」を実行して出たエラーが以下。
  C:\>python.exe -V
  Python 2.7.2
  
  C:\>python.exe C:\Software\Python27\Lib\site-packages\win32comext\axscript\client\pyscript.py
  Traceback (most recent call last):
   File "C:\Software\Python27\Lib\site-packages\win32comext\axscript\client\pyscript.py", line 11, in
   import win32com
   File "C:\Software\Python27\lib\site-packages\win32com\__init__.py", line 5, in
   import win32api, sys, os
  ImportError: DLL load failed: 指定されたモジュールが見つかりません。
  
  C:\>

再度PyWin32をインストールすることで上記2つの現象は収まった。

「 32bit版か64bit版か 」

Python,PyWin,EmEditorの全てを32bit版かあるいは64bit版に統一しておかないと具合が悪かった。
ここまでの説明は32bit版での話し。
他の環境で「Python,PyWinは32bit」、「EmEditorだけ64bit」でやったところ、トラブった。
Pythonマクロを実行すると、以下のエラーダイアログが出る。
「クラスが登録されていません」

【 参考情報 】

「 EmEditorマクロのオンラインヘルプ 」
http://jp.emeditor.com/help/macro/index.htm
EmEditor ホーム - EmEditor ヘルプ
マクロ リファレンス

「 色々な言語でマクロを動かす情報 」

http://emeditor.web.fc2.com/EmEditor_Macro_ActiveScript.html
EmEditorのマクロを様々なActiveScriptで書いてみる

ただし、少なくともPythonに関してはダメだった。
ActivePythonではダメ。

「 Python for Windows extensions(PyWin32) 」
http://sourceforge.net/projects/pywin32/
Python for Windows extensions

以上

テーマ:プログラミング - ジャンル:コンピュータ

【Python】PythonとライブラリmechanizeでWEBスパイダリング/スクレイピング

PythonでWEBスパイダリング/スクレイピング用のライブラリ「mechanize」というものをインストールし、動作確認するまでを整理してみます。

スパイダリング/スクレイピングというのは要するにWEBサイトをうろつき回り、WEBページ中の情報で必要なところを切り出してくる、といったものです。
WEB APIが用意されてないようなサイトからプログラムでデータを得る時は、WEBページのHTMLソースを解析し、必要な文字列等を抽出する、というわけです。

「 環境 」

ここで今回やった時の環境について。

Windows7 64bit
Python 2.7

Pythonのバージョンには注意です。
最初、3.X系でやろうとしたのですがうまく行かず、結局2.7を入れました。

「 手順概要 」

これからやる作業は以下です。
  1. EasyInstallのインストール
  2. Mechanizeのインストール
  3. 実験
「 EasyInstallのインストール 」

MechanizeのインストールにEasyInstallを使うのですが、入ってなかったので。

以下へ。

http://peak.telecommunity.com/dist/


以下を落とします。
ez_setup.py

ez_setup.pyをPythonインストールディレクトリ下にコピーします。
以下、例です。
C:\Software\Python27\
ez_setup.py

あとはez_setup.pyを実行するだけです。
以下、実行例。
C:\Software\Python27>python ez_setup.py
Downloading http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
Processing setuptools-0.6c11-py2.7.egg
Copying setuptools-0.6c11-py2.7.egg to c:\software\python27\lib\site-packages
Adding setuptools 0.6c11 to easy-install.pth file
Installing easy_install-script.py script to C:\Software\Python27\Scripts
Installing easy_install.exe script to C:\Software\Python27\Scripts
Installing easy_install.exe.manifest script to C:\Software\Python27\Scripts
Installing easy_install-2.7-script.py script to C:\Software\Python27\Scripts
Installing easy_install-2.7.exe script to C:\Software\Python27\Scripts
Installing easy_install-2.7.exe.manifest script to C:\Software\Python27\Scripts

Installed c:\software\python27\lib\site-packages\setuptools-0.6c11-py2.7.egg
Processing dependencies for setuptools==0.6c11
Finished processing dependencies for setuptools==0.6c11

C:\Software\Python27>

以下のようにインストールされていることが確認できます。
C:\Software\Python27>dir scripts
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 940C-02E6 です

 C:\Software\Python27\scripts のディレクトリ

2011/11/17  23:53    <DIR>          .
2011/11/17  23:53    <DIR>          ..
2011/11/17  23:53               316 easy_install-2.7-script.py
2011/11/17  23:53             7,168 easy_install-2.7.exe
2011/11/17  23:53               531 easy_install-2.7.exe.manifest
2011/11/17  23:53               308 easy_install-script.py
2011/11/17  23:53             7,168 easy_install.exe
2011/11/17  23:53               527 easy_install.exe.manifest
               6 個のファイル              16,018 バイト
               2 個のディレクトリ  120,230,211,584 バイトの空き領域

C:\Software\Python27>

「 Mechanizeのインストール 」

EasyInstallのあるディレクトリ「Scripts」まで移動してから以下でインストールします。
easy_install mechanize

以下、実行例。
C:\Software\Python27\Scripts>easy_install mechanize
Searching for mechanize
Reading http://pypi.python.org/simple/mechanize/
Reading http://wwwsearch.sourceforge.net/mechanize/
Best match: mechanize 0.2.5
Downloading http://pypi.python.org/packages/source/m/mechanize/mechanize-0.2.5.tar.gz
Processing mechanize-0.2.5.tar.gz
Running mechanize-0.2.5\setup.py -q bdist_egg --dist-dir c:\users\yosi\appdata\local\temp\easy_install-3dsj4w\mechanize-0.2.5\egg-dist-tmp-nt82uk
warning: no files found matching 'output' under directory 'test\functional_tests_golden'
Adding mechanize 0.2.5 to easy-install.pth file

Installed c:\software\python27\lib\site-packages\mechanize-0.2.5-py2.7.egg
Processing dependencies for mechanize
Finished processing dependencies for mechanize

C:\Software\Python27\Scripts>


以下のようにmechanizeのライブラリが入ったことが確認できます。

C:\Software\Python27\Lib\site-packages\
mechanize-0.2.5-py2.7.egg

「 実験 」

ここではGoogleへのアクセスを試してみます。
Googleのトップぺージにアクセスし、タイトル表示とページ中のリンクを全て表示しています。
Pythonのコマンドラインで対話的に実行しました。

Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> from mechanize import Browser
>>> br = Browser()
>>> br.open('http://www.google.com/')
<response_seek_wrapper at 0x2a50580 whose wrapped object = <closeable_response at 0x2a50288 whose fp = <socket._fileobject object at 0x02A47AF0>>>
>>> br.title()
'Google'
>>> for i in br.links():
...     print i
...
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/imghp?hl=ja&tab=wi', text='\x89\xe6\x91\x9c', tag='a', attrs=[('class', 'gb1'), ('href','http://www.google.co.jp/imghp?hl=ja&tab=wi')])
Link(base_url='http://www.google.co.jp/', url='http://video.google.co.jp/?hl=ja&tab=wv', text='\x93\xae\x89\xe6', tag='a', attrs=[('class', 'gb1'), ('href', 'http://video.google.co.jp/?hl=ja&tab=wv')])
Link(base_url='http://www.google.co.jp/', url='http://maps.google.co.jp/maps?hl=ja&tab=wl', text='\x92n\x90}', tag='a', attrs=[('class', 'gb1'), ('href', 'http://maps.google.co.jp/maps?hl=ja&tab=wl')])
Link(base_url='http://www.google.co.jp/', url='http://news.google.co.jp/nwshp?hl=ja&tab=wn', text='\x83j\x83\x85\x81[\x83X', tag='a', attrs=[('class', 'gb1'), ('href', 'http://news.google.co.jp/nwshp?hl=ja&tab=wn')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/prdhp?hl=ja&tab=wf', text='\x83V\x83\x87\x83b\x83s\x83\x93\x83O', tag='a', attrs=[('class', 'gb1'), ('href', 'http://www.google.co.jp/prdhp?hl=ja&tab=wf')])
Link(base_url='http://www.google.co.jp/', url='https://mail.google.com/mail/?tab=wm', text='Gmail', tag='a', attrs=[('class', 'gb1'), ('href', 'https://mail.google.com/mail/?tab=wm')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/intl/ja/options/', text='\x82\xe0\x82\xc1\x82\xc6\x8c\xa9\x82\xe9 &raquo;', tag='a', attrs=[('class', 'gb1'), ('style', 'text-decoration:none'), ('href', 'http://www.google.co.jp/intl/ja/options/')])
Link(base_url='http://www.google.co.jp/', url='/url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja%26source%3Diglk&usg=AFQjCNEmQuNg1ivauCid9lXp5yYSx6AHXw', text='iGoogle', tag='a', attrs=[('href', '/url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja%26source%3Diglk&usg=AFQjCNEmQuNg1ivauCid9lXp5yYSx6AHXw'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.com/history/optout?hl=ja', text='\x83E\x83F\x83u\x97\x9a\x97\xf0', tag='a', attrs=[('href', 'http://www.google.com/history/optout?hl=ja'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='/preferences?hl=ja', text='\x90\xdd\x92\xe8', tag='a', attrs=[('href', '/preferences?hl=ja'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='https://accounts.google.com/ServiceLogin?hl=ja&continue=http://www.google.co.jp/', text='\x83\x8d\x83O\x83C\x83\x93', tag='a', attrs=[('id', 'gb_70'), ('href', 'https://accounts.google.com/ServiceLogin?hl=ja&continue=http://www.google.co.jp/'), ('class', 'gb4')])
Link(base_url='http://www.google.co.jp/', url='/advanced_search?hl=ja', text='\x8c\x9f\x8d\xf5\x83I\x83v\x83V\x83\x87\x83\x93', tag='a', attrs=[('href', '/advanced_search?hl=ja')])
Link(base_url='http://www.google.co.jp/', url='/language_tools?hl=ja', text='\x8c\xbe\x8c\xea\x83c\x81[\x83\x8b', tag='a', attrs=[('href', '/language_tools?hl=ja')])
Link(base_url='http://www.google.co.jp/', url='/intl/ja/ads/', text='\x8dL\x8d\x90\x8cf\x8d\xda', tag='a', attrs=[('href', '/intl/ja/ads/')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.co.jp/intl/ja/services/', text='\x83r\x83W\x83l\x83X \x83\\\x83\x8a\x83\x85\x81[\x83V\x83\x87\x83\x93', tag='a', attrs=[('href', 'http://www.google.co.jp/intl/ja/services/')])
Link(base_url='http://www.google.co.jp/', url='/intl/ja/about.html', text='Google \x82\xc9\x82\xc2\x82\xa2\x82\xc4', tag='a', attrs=[('href', '/intl/ja/about.html')])
Link(base_url='http://www.google.co.jp/', url='http://www.google.com/ncr', text='Google.com in English', tag='a', attrs=[('href', 'http://www.google.com/ncr'),('class', 'gl nobr')])
Link(base_url='http://www.google.co.jp/', url='/intl/ja/privacy.html', text='\x83v\x83\x89\x83C\x83o\x83V\x81[', tag='a', attrs=[('href', '/intl/ja/privacy.html')])
>>>

おしまい








テーマ:プログラミング - ジャンル:コンピュータ

次のページ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。