BearutifulSoup 使ってみたよ

id:kadoppe の人がYahooSearchをやってたので便乗
http://d.hatena.ne.jp/kadoppe/20070330/1175247772

# -*- coding: utf-8 -*-

import urllib
import urllib2
import pyexpat
from BeautifulSoup import BeautifulSoup

class YahooSearchRequest (object):
    methodurls = dict(web='WebSearchService/V1/webSearch',
                   image='ImageSearchService/V1/imageSearch', 
                   video='VideoSearchService/V1/videoSearch', 
                   assist='AssistSearchService/V1/assistSearch')
    baseurl = "http://api.search.yahoo.co.jp/"
    def __init__(self, appid, query="", mode='web'):
        self.url = "%s%s" % (self.baseurl, self.methodurls[mode])
        self.params = dict(appid=appid, query=query)
        self.result = None

    def addQuery(self, query):
        self.params['query'] = self.params['query'] + " " + query
        self.result = None
        return self
    
    def __getitem__(self, key):
        return self.params[key]

    def __setitem__(self, key, value):
        self.params[key] = value

    def asBeautifulSoup(self):
        result = self.search()
        return BeautifulSoup(result)

    def asDictList(self):
        b = self.asBeautifulSoup()
        
        return [dict(title=r('title')[0].string,
                     summary=r('summary')[0].string)
                for r in b('resultset')[0]('result')]
            
    def search(self, force=False):
        if self.result is None or force:
            x = urllib2.urlopen(self.requestUrl)
            self.result = x.read()
        return self.result

    @property
    def queryString(self):
        return urllib.urlencode(self.params)
    
    @property
    def requestUrl(self):
        return "%s?%s" % (self.url, self.queryString)

    @property
    def query(self):
        return self.params['query']

appid = '******' # よきにはからってください

for x in YahooSearchRequest(appid).addQuery("SPAM").addQuery("EGG").asDictList():
    print 'title:', x['title']
    print 'summary:', x['summary']

結果のパースをもうちょっと考えた方がいいなぁ