単純なものとして、BeautifulSoupを使ったHTML解析で
Googleの表示順位を取得するスクリプトを作ってみた。
んだから、もちろんBeautifulSoupと初期設定は必須。
そして、もちろんノンオブジェクト指向。
設定で指定した検索クエリ(q)を使用し、
Googleで検索結果を取得。
その中からURL(s)を発見したら表示するというもの。
Windowsは、関連付けから起動すると
処理が終了した時に窓が閉じてしまうので
コマンドプロンプトから起動する。
動体視力がよければ見えるかも?
まぁテキストに吐き出せば済む事。
# -*- coding: utf-8 -*-
# Googleの表示順位を取得import string, re, urllib, urllib2, urlparse, time
from BeautifulSoup import BeautifulSoup### 設定 #########################################################
s = re.compile(r"^http://python.blog-slime.com/") # 順位を得るURL
q = 'Perl使いのPythonちゃん' # 検索クエリ
q = urllib.quote(q) # クエリをURLエンコード
##################################################################g = 'http://www.google.co.jp/search?hl=ja&num=100&q='
# クライアントを生成
opener = urllib2.build_opener()# PythonのUAがGoogleに弾かれているようなので変更
opener.addheaders = [('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')]url = g + q # URLとクエリを連結
print urlcnt = 0
p = 1
f = 0while 1:
next = ""
print str(p) + u"Page目"
# Google検索結果を取得
html = opener.open(url).read()
# HTMLソースをBeautifulSoupに渡す
# ※utf-8に変換される
soup = BeautifulSoup(html)
# soup.findAll('a')で、Aタグのオブジェクト全てを取得
for obj in soup.findAll('a'):
# href属性でURLを取得
href = obj['href']
# リンク文字を抜き出し、タグを削除して連結
cont = ''.join([str(t) for t in obj.contents[:]])
intext = re.sub("<[^>]*>", "", cont)
# 次の検索結果へのリンクを取得
if intext == "次へ":
next = href
# キャッシュとGoogle内のリンク、スポンサーリンクは除外
if None == re.search("^https?://[^\.]*\.?google\.co|^/", href) and intext != "キャッシュ":
cnt += 1
print u" %d個目:" % cnt, unicode(intext).encode('mbcs')
# 目的のURLを含むリンクを発見
if s.search(href):
print u" 発見"
print u"============= 検索結果 ============="
print "href : " + href
print "name : " + unicode(intext).encode('mbcs')
print "rank : %d" % cnt
print "===================================="
f = 1
break
# 次へのリンクが存在しなければ終了
if next == "":
if f == 0:
print u"発見できませんでした"
print u"============= 検索結果 ============="
print u"圏外"
print "===================================="
break
else:
url = urlparse.urljoin(url, next)
ちなみに、あまり多用し過ぎると
Googleからスパム扱いされるので
変な事には使わないように。。。

コメントする