2009年04月24日
被リンク数をチェックする
練習にYahoo! サイトエクスプローラーを使って、被リンク数を取得するスクリプトを書いてみました。ただ被リンクのあるURLだけ取得してくるのもなんなので、ついでに被リンクの多いドメインを降順で表示してみる。
Yahoo! サイトエクスプローラーの検索結果の解析にはBeautifulSoupを使用。
Backlinkcheck(<チェック対象URL>,<ページ指定>)として使用。
Yahoo! サイトエクスプローラーは検索結果を1ページ(10件)しか表示してくれないらしいので、何ページまで取得するかを指定することにした。0から数えて指定してください。
補足:
Yahoo! サイトエクスプローラーの検索結果の解析にはBeautifulSoupを使用。
import urllib2
import BeautifulSoup
def Backlinkcheck(query, depth=0):
backlink = []
depth = (depth+1) * 10
if depth < 0 : depth=0
for i in range(0,depth,10):
yahooSearch = "https://siteexplorer.search.yahoo.co.jp/advsearch?&st=inlinks&si=il&uf=esd"
yahooSearch = yahooSearch + "&b=" + str(i) + "&p=" + query
html = urllib2.urlopen(yahooSearch)
soup = BeautifulSoup.BeautifulSoup(html)
for aTag in soup.body.table.findAll('a'):
backlink.append(aTag.string)
backlink.sort()
domein = [i.split("/")[0] for i in backlink]
domeinConut = []
for i in set(domein):
domeinConut.append((i, domein.count(i)))
print "Domein:"
domeinConut.sort( cmp=lambda x, y: cmp(x[1], y[1]), reverse=True )
for i, j in domeinConut:
print i + ":" + str(j)
print
print "BacklinkURL:"
for i in backlink:
print i
if __name__ == '__main__':
url = "http://hoge.hoge"
Backlinkcheck(url, 10)
Backlinkcheck(<チェック対象URL>,<ページ指定>)として使用。
Yahoo! サイトエクスプローラーは検索結果を1ページ(10件)しか表示してくれないらしいので、何ページまで取得するかを指定することにした。0から数えて指定してください。
補足:
for aTag in soup.body.table.findAll('a'):
backlink.append(aTag.string)Yahoo! サイトエクスプローラーの検索結果はテーブルタグに囲われて返ってくるので、テーブルタグ内のaタグのみを対象にループを回してアンカーテキストを取得。
for i in set(domein):
domeinConut.append((i, domein.count(i)))
domeinリストの重複をset関数で削除しループさせ、重複したドメイン名のカウント数をタプルにし、2次元配列としてdomeinConutに追加している。domeinConutの内容は以下のようなリストになる。domeinConut = [("ドメイン名",重複カウント数),("ドメイン名",重複カウント数),…]なんかもっと上手い方法がありそうだけど、これしか思いつかなかった。domeinConut.sort( cmp=lambda x, y: cmp(x[1], y[1]), reverse=True )domeinConutリストをタプルの2番目の要素(重複カウント数)を対象に降順にソートしています。この記事へのトラックバックURL
http://lifecrak.gunmablog.net/t42837


