PythonでGoogle AnalyticsのAPIを叩く

ちょっとGoogle AnalyticsのWebだとやりにくいアクセス集計がやりたくて、Analytics APIを叩いてみました。以前Google CalendarのAPIを使った事があるので大丈夫かと思ったら、結構手間取ったので記録しておきます。

Continue reading “PythonでGoogle AnalyticsのAPIを叩く”

[Python] 正規表現でHTMLからテキストだけ抽出する

あまり使う事はないのですが、たまにあれどうするんだっけと思うので記事にしておきます。

とりあえず何となく自分で書いてみたのが以下のようなコードなんですが、タグも取りきれてないし色々微妙で、正規表現面倒くさくて辛いです。

def strip_tag(url):
    resp = requests.get(url)
    texts = re.findall(r'<[^>]+?>(.+?)<\/[^>]+?>', resp.content)
    return " ".join(texts)

Continue reading “[Python] 正規表現でHTMLからテキストだけ抽出する”

英語で一番多く使われるアルファベットはなんだろう、という話

シャーロックホームズのシリーズに「踊る人形」という話があります。軽くネタバレすると、一見落書きに見える「棒人間」の羅列が実はアルファベットとマッピングされた暗号になっていて、ホームズはアルファベットの出現頻度から、この暗号を解読します。この暗号解読がキーになってホームズは事件を解決するという話です。

問題はその解読方法です。詳細は忘れましたが「E」が一番多くて、次が〇〇で・・・の様にアルファベットの出現頻度を次々に説明するホームズに対して、小学生だった僕はホンマかよ!証拠無いやん!ココまで来て適当な事言うな!とすっきりしませんでした。(ホームズよりルパンシリーズの方が好きだったので、ホームズに対して厳しかったのです。)

まぁそんな事は忘れていたんですが、最近nltkでコーパスにアクセスしてるうちに思い出しました。「フハハハ、忌々しいホームズめ!pythonとnltkを覚えた今、僕は20年前の無力なままではないのだ!貴様の思い込みを検証してやる!」と一人魔王をしながら検証コードを書いてみました。

Continue reading “英語で一番多く使われるアルファベットはなんだろう、という話”

Pythonのhelp関数を初めて知った件

恥ずかしい話なんですが、組み込み関数のhelpを初めて知りました。今まではIPythonの?と??でメソッド一覧だったり定義だったりを確認していました。

大抵はそれでも良いのですが、新しいモジュールを使う際に、上手く情報にアクセスできないという問題がありました。ドキュメントが用意されていないモジュールも数多くあります。それで仕方なくソースコードに当たるというのを繰り返していたわけですが、ふとこの関数の存在を知りまして衝撃を受けているところです。

モジュール一覧、関数一覧、データ一覧が全部見えますやん!

>> import lxml.html
>> help(lxml.html)
Help on package lxml.html in lxml:

NAME
    lxml.html - The ``lxml.html`` tool set for HTML handling.

FILE
    /Library/Python/2.7/site-packages/lxml/html/__init__.py

PACKAGE CONTENTS
    ElementSoup
    _dictmixin
    _diffcommand
    _html5builder
    _setmixin
    builder
    clean
    defs
    diff
    formfill
    html5parser
    soupparser
    usedoctest

FUNCTIONS
    Element(*args, **kw)
        Create a new HTML Element.

        This can also be used for XHTML documents.

    document_fromstring(html, parser=None, **kw)

    fragment_fromstring(html, create_parent=False, base_url=None, parser=None, **kw)
        Parses a single HTML element; it is an error if there is more than
        one element, or if anything but whitespace precedes or follows the
        element.

        If create_parent is true (or is a tag name) then a parent node
        will be created to encapsulate the HTML in a single element.  In
        this case, leading or trailing text is allowed.

        base_url will set the document's base_url attribute (and the tree's docinfo.URL)

    fragments_fromstring(html, no_leading_text=False, base_url=None, parser=None, **kw)
        Parses several HTML elements, returning a list of elements.

        The first item in the list may be a string (though leading
        whitespace is removed).  If no_leading_text is true, then it will
        be an error if there is leading text, and it will always be a list
        of only elements.

        base_url will set the document's base_url attribute (and the tree's docinfo.URL)

    fromstring(html, base_url=None, parser=None, **kw)
        Parse the html, returning a single element/document.

        This tries to minimally parse the chunk of text, without knowing if it
        is a fragment or a document.

        base_url will set the document's base_url attribute (and the tree's docinfo.URL)
....

今まで何してたんだ。。。あと僕が今まで書いたモジュールは全くこの関数の事を意識してないので、残念な出力になっています。ちょこちょこ直そうと思います。

[Python] Hello PyLab World

グラフを使いたいなという時はPyLabを使ったら良いよ、という事らしいので触ってみました。まずは2次元グラフにsin, cosをプロットしてみます。

2次元グラフ

pylab.showを呼ぶまでの間にプロットしたり、タイトル入れたりすれば良いようです。一度showを呼ぶとコンテキストがクリアされる感じですね。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy
import pylab

interval = 0.01
times = numpy.arange(0, 1 + interval, interval)

sin = numpy.sin(2 * numpy.pi * times)
cos = numpy.cos(2 * numpy.pi * times)

pylab.plot(times, sin)
pylab.plot(times, cos)

pylab.grid(True)
pylab.title('Hello Pylab World')

pylab.show()

pylotで2次元グラフをプロットしてみる

Continue reading “[Python] Hello PyLab World”

[Python] lxmlでスクレイピングのメモ

以前、BeautifulSoupでのスクレイピングのまとめを書きましたが、ベンチマークを取ってみるとlxmlの方が圧倒的に速いので、lxmlが使えるならlxmlを使った方が良いです。それで久々にlxmlを使おうとしたら、例によって全く覚えていなくて悲しいのでメモ書きです。

Continue reading “[Python] lxmlでスクレイピングのメモ”