Python、Unix、インターネット関連の覚書
Python でウェブページをダウンロードしてページタイトルだけを取り出したい。Beautiful Soup というXML/HTMLのパーサを使うと簡単にタイトルを取得できる。
import urllib
import BeautifulSoup
soup = BeautifulSoup.BeautifulSoup(urllib.urlopen("https://www.google.com"))
print soup.title.string
参考ページ How can I retrieve the page title of a webpage using Python?
メールアカウントを作って送受信のテストをする時、毎回メールクライアントを設定して確認するのが面倒なので、メールボックスにメールが届いているかを確かめるだけなら telnet で接続してメールボックスのなかを覗いてみよう。
ただし、 telnet はログインの際の認証情報も認証成功後の通信内容も平文でやり取りするので、セキュリティの観点からは問題があります。このことを踏まえた上で実行してください。
% telnet your.pop.server 110
接続できたらユーザー名を入力する。
USER [user name]
[user name] にユーザー名を入力しよう。[] は不用です。
「+OK Password required.」と応答があればパスワードを入力する。
PASS [password]
[password] にパスワードを入力しよう。[] は不用です。
認証されたら「+OK logged in.」というメッセージが返ってくるので、あとはメールサーバーと対話するためのコマンドを入力してメッセージを表示したりします。
ウェブサイトにリンク用のバナーを掲載しているオーナー様で、リンク用バナーの利用率を知りたいと思ったことはありませんか?
トラッキング用のコードを埋め込んでいないと簡単には集計できないのですが、ウェブサーバーのアクセスログから何とかして集計する方法を紹介します。プログラムの知識が必要ですので自分で出来ない人は情報システム部門などに依頼しましょう。
# バナーがリクエストされたログを抽出する
cat access.log |
grep -F 'GET /banner.gif' |
grep -v '"http://www.mydomain.jp/'
> banner-view.txt
# 表示回数を数える
wc -l banner-view.txt
# 参照元を出力する
cat banner-view.txt |
awk -F ' "' '{print $3}' |
awk -F '"' '{print $1}' |
sort |
uniq > referer.txt
grep -v '"http://www.mydomain.jp/'には除外するサイトを指定します。通常は自社サイト内での読み込みを無視するのが適切でしょう。
アクセスログから特定のIPアドレスのレコードを削除するスクリプトです。
IPアドレスのリストは別ファイルに保存されています。
#!/usr/bin/env python
# vim: set fileencoding=utf8:
"""ブラックリストのレコードを削除する"""
__usage__ = "Usage: ip-ban.py < [log file] > [output file]"
import os
import sys
#
# スパムIPアドレスを読み込む
#
blacklist = set()
spamip_file = os.path.join(os.path.dirname(__file__), "spamdb", "banlist.txt")
fp = file(spamip_file, "r")
for banip in fp:
blacklist.add(banip.strip())
fp.close()
#
# ログデータを読み込む
#
for line in iter(sys.stdin.readline, ""):
ipaddr = line.split(" ")[0]
if ipaddr in blacklist:
sys.stderr.write("Ban!: %s\n" % ipaddr)
else:
sys.stdout.write(line)
sys.exit(0)
bash の history コマンドでコマンドの使用回数を調べて自分がよく使っているコマンドを知るワンライナーです。
history | awk '{print $2}' | sort | uniq -c | sort -rn
パイプで繋がれているコマンドを解説します。
まずは bash の history コマンドでコマンド履歴を表示する。
history コマンドは1列目に番号が表示されるので、awk コマンドで2列目を取り出す。 フィールドの区切りはスペースで良いので '-F' オプションは不要。
awk で取り出したコマンド名を並べ替える。
重複する行を削除して出現回数を表示する。ちなみに uniq は入力データがあらかじめ整列されていないと期待する結果を得ることができないので先の sort コマンドが必須である。
最後にコマンドの出現回数を数字の大きい順に並べ替える
$ history | awk '{print $2}' | sort | uniq -c | sort -rn
122 ls
115 hg
42 vim
31 ssh
26 cd
16 ..
13 rst2html-2.6.py
13 history
12 cat
11 man
11 exit
7 rm
7 grep
5 port
5 mv
5 find
5 fg
4 which
4 open
4 lftp
4 help
3 whereis
3 less
3 echo
2 vimdiff
2 telnet
2 svn
2 sudo
2 sh
2 scp
2 ll
2 du
2 alias
1 uname
1 top
1 tail
1 s
1 lv
1 ln
1 l
1 diff
1 df
1 date
1 cp
最近 Mercurial を使い始めたので hg が上位にきてる。
Author:speirs