PythonでGoogleの表示順位を取得

| | コメント(0) | トラックバック(2)

単純なものとして、BeautifulSoupを使ったHTML解析で
Googleの表示順位を取得するスクリプトを作ってみた。

んだから、もちろんBeautifulSoupと初期設定は必須。
そして、もちろんノンオブジェクト指向。

設定で指定した検索クエリ(q)を使用し、
Googleで検索結果を取得。
その中からURL(s)を発見したら表示するというもの。

google_search.py

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 url

cnt = 0
p = 1
f = 0

while 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からスパム扱いされるので
変な事には使わないように。。。

トラックバック(2)

このブログ記事を参照しているブログ一覧: PythonでGoogleの表示順位を取得

このブログ記事に対するトラックバックURL: http://mt.blog-slime.com/mt-tb.cgi/11

hirono_hideki 日暮途遠 - [Python]unicode変換 (2007年10月25日 00:25)

 昨夜、勉強になりそうなpythonのソースコードをネットで探していたところ、次のものが見つかりました。 http://python.blog-slim... 続きを読む

Blog: [Python][Django]第2回Python勉強会(Django) We must use a secure password. うお... 続きを読む

コメントする

このブログ記事について

このページは、adminが2007年8月 2日 18:53に書いたブログ記事です。

ひとつ前のブログ記事は「内部エンコーディングに使われるエンコードをUTF-8に設定する方法。」です。

次のブログ記事は「JTG - ipod・iTunes等、mp3プレイヤー用ジャケット画像簡単取得ツール」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。