Index > URLからページタイトルを取得する方法(Jython)
Tue, September 22, 2009

URLからページタイトルを取得する方法(Jython)

Jythonを使って、 指定されたURLからページタイトルを抽出する方法。

実装の基本方針

  1. URLからHTMLを取り出す
  2. HTMLデータの文字エンコーディングを取得(※)
  3. HTML中の < title > を探して、ページタイトルを取得する

※)文字エンコーディング取得

HTMLのヘッダ要素内の meta 要素で、charset が指定されている記述から取得します。

例)

<meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS" />

この場合は、Shift_JIS。

コード get-title.py

import sys
import java
import java.io as io
import java.util.regex as re


PAT_ENCODE=re.Pattern.compile('<meta\\s*http-equiv.*charset=([0-9a-zA-Z_]*)"',re.Pattern.CASE_INSENSITIVE)

def getEncoding(url):
    enc='UTF-8'

    br=io.BufferedReader(io.InputStreamReader(url.openStream()))
    while(True):
        line=br.readLine()
        if line==None:
            break

        m=PAT_ENCODE.matcher(line)
        if m.find():
            enc = m.group(1)
            break

    br.close()
    return enc



PAT_TITLE=re.Pattern.compile('<title>(.*)</title>',re.Pattern.CASE_INSENSITIVE)

def getTitle(url):
    title='Title not found'
    enc=getEncoding(url)

    br=io.BufferedReader(io.InputStreamReader(url.openStream(),enc))
    while(True):
        line=br.readLine()
        if line==None:
            break

        m=PAT_TITLE.matcher(line)
        if m.find():
            title = m.group(1)
            break

    return title

urlstr=sys.argv[1]
print getTitle( java.net.URL(urlstr) )

タイトルを取得するためだけに 文字エンコーディングの取得とタイトルの取得で二度もHTMLをネットワークから取り出すのは どうかとも思いましたが、とりあえず目的は達成できたので、よしとする。

作動テスト

試しに首相官邸ホームページのタイトルを取得してみます。

$ jython  get-title.py http://www.kantei.go.jp/
首相官邸ホームページ

注意点

 Twitter
follow me on Twitter
 Categories