読者です 読者をやめる 読者になる 読者になる

done is better than perfect

自分が学んだことや、作成したプログラムの記事を書きます。

端末(Terminal)からWeblioで検索できるPythonスクリプト書いた

プログラミング

端末(Terminal)からWeblioで検索できるPythonスクリプト書いてみました。

非常に簡易的かつ、エラー処理とかも行っていませんが。

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

import sys 
import urllib.request
import urllib.parse
from html.parser import HTMLParser

WEBLIO_URL = "http://ejje.weblio.jp/content/"

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self._is_midashigo = False
        self._is_translated_word = False

    def handle_starttag(self, tag, attrs):
        if tag == "h2":
            attrs_dict = {t[0]:t[1] for t in attrs}
            if attrs_dict.get("class", None) == "midashigo":
                self._is_midashigo = True
        if tag == "a":
            attrs_dict = {t[0]:t[1] for t in attrs}
            if attrs_dict.get("class", None) == "crosslink" and self._is_midashigo:
                self._is_translated_word= True

    def handle_data(self, data):
        if self._is_translated_word:
            print(data)
            self._is_midashigo = False
            self._is_translated_word = False


def parse_weblio(raw_ret):
    parser = MyHTMLParser()
    parser.feed(raw_ret)


def main():
    word = urllib.parse.quote_plus(sys.argv[1])
    filename, headers = urllib.request.urlretrieve(WEBLIO_URL + word)
    with open(filename) as f:
        parse_weblio(f.read())



if __name__ == "__main__":
    main()

実行方法は以下のようにします。

$ python3 weblio.py "翻訳したい言葉"

2014-02-16追記

少しだけアップデートしました。