BeautifulSoupを使ってGoogleの表示順位を調べる

BeautifulSoupはHTML解析用のライブラリです。htmllib.HTMLParserやHTMLPaprser.HTMLParserと違い、正しくないHTMLも扱えるようです。これを使ってGoogleの表示順位を調べるスクリプトを書いてみました。 #!python # vim:fileencoding=utf-8 import re impor…

HTMLParser.HTMLParserでリンクを抽出

#!python # vim:fileencoding=utf-8 from HTMLParser import HTMLParser import urllib2 from urlparse import urlparse class ExtractTextLinkParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.links = [] self.url = "" self.text…

htmllib.HTMLParserでリンクを抽出

#!python # vim:fileencoding=utf-8 from htmllib import HTMLParser from formatter import NullFormatter import urllib2 from urlparse import urlparse class ExtractTextLinkParser(HTMLParser): def __init__(self): HTMLParser.__init__(self, NullFo…

重複する要素を取り除く

>>> xs = [5, 8, 5, 1, 1, 4, 2, 4, 3, 2] >>> set(xs) set([1, 2, 3, 4, 5, 8]) >>> sorted(set(xs), key=xs.index) # 順序を維持 [5, 8, 1, 4, 2, 3]

整数を漢数字に変換

#!python # vim:fileencoding=utf-8 def num2kanji(num): KNUM = [u"", u"一", u"二", u"三", u"四", u"五", u"六", u"七", u"八", u"九"] DIGIT1 = (u"", u"十", u"百", u"千") DIGIT2 = (u"", u"万", u"億", u"兆", u"京") try: num = int(num) except Val…

文字列を逆順にする

>>> str = "abcdefg" >>> str[::-1] 'gfedcba' >>> >>> str[0:5:2] # 0番目から5番目までを2つおきに取り出す 'ace' >>> str[-1:-5:-1] # 後ろの4つの要素を逆順に取り出す 'gfed'

wgetでYouTube等から動画を落とす

今度は正規表現を使わずに書いてみました。 #!python #encoding=utf-8 import urllib import urllib2 import re import os import sys import time save_dir = r"c:\My Documents" interval = 3 def get_video_detail(url): for host, video in VIDEOS.items…

wgetでYouTube等から動画を落とす

Rubyに戻ってみました。selfを書かなくて済むのはいいんですが、Pythonに慣れてきたせいか、endを書くのが少し面倒になってます。後、インスタンスごとにメソッドの振る舞いを変えられるのはいいです。新しくクラスを作らなくて済みますし。 #!ruby require …

スーパークラスのメソッドを呼び出す

class SuperClass: def __init__(self, x): self.x = x def show(self): print "x:%s" % self.x class SubClass(SuperClass): def __init__(self): SuperClass.__init__(self, 3) c = SubClass() c.show() サブクラスのメソッド内で、同名のスーパークラスの…

wgetでYouTubeから動画を落とす

wgetでYouTube、Veoh、Dailymotion、AmebaVision、YourfilehostからFLVファイルを落とします。ただし、ログインしないと見れない動画は落とせません。 #!python #encoding=utf-8 import os import sys import re import urllib import urllib2 import time s…

コマンドラインモードでの貼り付け

vim

Ctrl-R " レジスタの値(dd/yyで削除/コピーした値)を貼り付け Ctrl-R + クリップボードの値を貼り付け

テキストの編集

vim

文字列の挿入 a カーソル位置の後に文字列を追加 A 現在行の末尾に文字列を追加 i カーソル位置の前に文字列を追加 I 現在行の最初の非空白文字の前に文字列を追加 o 現在行の下に文字列を追加 O 現在行を下に1行ずらし、空いた行に文字列を追加 文字列の削…

カーソルの移動

vim

上下左右にN桁移動 N l N桁右に移動 N h N桁左に移動 N k N桁上に移動 N j N桁下に移動 N gk 見た目の行でN桁上に移動 N gj 見た目の行でN桁下に移動 行を折り返す設定にしている場合、長い行は以下のように表示されます。 5 XXX Perhaps there should be a …

ニコニコから動画を落とすスクリプト改

ニコニコ動画ダウンローダ - odz bufferを参考にして、以前作ったニコニコから動画を落とすスクリプトを少しばかり修正しました。 デフォルトでCookieを"nico-cookie.txt"から読み込む ログインしていなければ、ログイン後、Cookieをファイルに保存 スクリプ…

クラスを定義する

>>> class Point: # クラス定義の開始 ... format = "%s [X:%s Y:%s]" # クラス変数 ... ... def __init__(self, x, y): # メソッドの定義 ... self.str = "Point" # インスタンス変数 ... self.set(x, y) ... ... def set(self, x, y): ... self.__x = int(…

ニコニコから動画を落とすスクリプト

勉強がてら、ニコニコから動画をダウンロードするスクリプトを書いてみました。一応、コメントとヘルプメッセージは英語にしてみましたが、正直、そこが一番自信がないです。というかプログラムそのものよりも、どういうメッセージを表示するかの方が悩みま…

フォーマット文字列のフィールド幅

>>> n = 1000 >>> format = "%%%dd" % len(str(n)) >>> format % 10 ' 10' この書き方だと%が多くてわかりにくいと思っていたところ、 >>> n = 1000 >>> size = len(str(n)) >>> format = "%*d" >>> format % (size, 10) # フィールド幅、値の順 ' 10' こう…

コマンドラインオプションの解析

from optparse import OptionParser, OptionValueError import os # スクリプトの使用方法を表す文字列 # デフォルト値は"Usage: %prog [options]" # "usage: "で始まらないと自動的に"usage :"が追加される # %progはスクリプト名で置換 usage = "usage: %p…

urllib2でCookieを使う

urllib2モジュールでCookieを使ったWebへのアクセスは以下のように行います。 import urllib2, cookielib cj = cookielib.CookieJar() # Cookieを格納するオブジェクト cjhdr = urllib2.HTTPCookieProcessor(cj) # Cookie管理を行うオブジェクト opener = ur…

urllib2モジュール

Getリクエスト >>> import urllib2 >>> r = urllib2.urlopen("http://www.yahoo.co.jp") Postリクエスト >>> import urllib >>> query = {"name":name, "password":password} # 送信するデータ >>> query = urllib.urlencode(query ) # URLエンコード >>> r …

文字列のフォーマット

>>> mail = "hoge@hoge.com" >>> password = "hogehoge" >>> print "mail=%s&password=%s" % (mail, password) mail=hoge@hoge.com&password=hogehoge >>> >>> year = 1989 >>> month = 11 >>> day = 25 >>> print "%d年%d月%d日" % (year, month, day) 1989…

文字列の結合

文字列を結合するには + よりもjoin( )を使った方が速いというので調べてみました。 from timeit import Timer setup = 's = "xxxxxxxxxx"' add_stmt = "s + s + s + s + s" join_stmt = '"".join((s, s, s, s, s))' print Timer(add_stmt, setup).repeat(3,…

コードの実行時間を計測する

コードの実行時間を計測するにはtimeitモジュールを使います。 from timeit import Timer t1 = Timer("for i in range(1000): n += 1", "n = 0") t2 = Timer("for i in xrange(1000): n += 1", "n = 0") print t1.timeit(10000) print t2.timeit(10000) 17.1…

文字列の操作

文字列のメソッドは正規表現を使うより速いので、文字列の操作をする場合は、まず文字列のメソッドでできないかを調べた方がよいです。 文字列の一部を取り出す >>> s = "python" >>> s[2] # 2番目の要素を取り出す 't' >>> s[1:4] # 1番目から3番目までの文…

自動的にエンコード及びデコードを行う

codecsモジュールを使うと、自動的にエンコードやデコードを行ってくれるファイルオブジェクトを得ることができます。 新しく開くファイル import codecs # 自動的にエンコード・デコードを行うファイルオブジェクトを生成 f1 = codecs.open("utf-8.txt", "r…

ファイル操作

ファイルを開く、読み込む、書き込む f1 = f2 = None try: f1 = open("in.txt", "r") # 読み込みモードでファイルを開く f2 = open("out.txt", "w") # 新規書き込みモードでファイルを開く data = f1.read(100) # 100バイト分のデータを読み込む data += f1.…

正規表現 - コンパイル時のフラグ、名前付きのグループ化、文字列の分割・置換

正規表現の振る舞いを変える re.compile( )の第二引数にフラグを指定します。 >>> r1 = re.compile("[a-z]+=\d+", re.I) # 大文字と小文字を区別しない >>> r1.findall("abc=123&DEF=456") ['abc=123', 'DEF=456'] >>> >>> r2 = re.compile("a.+k", re.S) # …

正規表現 - コンパイル、マッチング、マッチした部分の取り出し

正規表現のコンパイル >>> import re >>> r = re.compile("(\w)=(\d)") >>> print r <_sre.SRE_Pattern object at 0x00954EC0> マッチングを行う search( )は文字列の中にマッチする部分があるかを、match( )は文字列の先頭でマッチするかを調べます。 >>> import re >>> r = re.compile("[a-z]+") ></_sre.sre_pattern>…

sort( )について少し詳しく

デフォルトでは、文字列なら文字コード順、数値なら値の小さい順に並び替えます。リストやタプルの場合は、0番目の要素で並び替えを行います。 >>> list = [94, 25, 9, 67] >>> list.sort() >>> list [9, 25, 67, 94] >>> >>> list = ["banana", "grape", "o…

変数名と関数名は同じにしてはいけない

関数はオブジェクトです。変数に代入することも可能です。 >>> range <built-in function range> >>> hoge = range >>> hoge(1, 10) [1, 2, 3, 4, 5, 6, 7, 8, 9] 関数名は関数オブジェクトを参照している変数と考えていいんでしょうか。別の関数を代入することができます。 >>> range</built-in>…