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

cloverrose's blog

Python, Machine learning, Emacs, CI/CD, Webアプリなど

ブクログ Python

ブクログからユーザーデータを取得したかったのでPythonで作ってみた

HTTPリクエストとJSONオブジェクト

ユーザー(ユーザー名はusername)が登録している本(最大100冊まで)は以下のHTTPリクエストでJSONファイルとして取得できる

import urllib
url='http://api.booklog.jp/json/username'
f=urllib.urlopen(url)

JSONファイルは以下のようにしてロードできる

import json
obj=json.load(f)

ロードしたJSONオブジェクトはbooksで本棚の本を取得できる

books=obj['books']

本のデータはtitle,author,asinの情報がある

for book in books:
  print 'title '+book['title']
  print 'author '+book['author']
  print 'asin '+book['asin']

ユーザー名の取得

ブクログ>本棚を探す>プロフィールから探すとたどっていくと本棚を探す[プロフィールから探す] - ブクログプロフィールタグ一覧を見ることができる。その中で適当なタグ(ここではミステリー)を選ぶ。

URLは次のような形式になっている。pagenumberは取得したいページ番号

ulr='http://booklog.jp/profiletag/%E3%83%9F%E3%82%B9%E3%83%86%E3%83%AA%E3%83%BC?page=pagenumber'

HTMLソースをみるとユーザー名は次のようにして取得できそうだ

import re
re.findall(ur'/users/(?P<name>[^/]*)/profile',src)

現時点だとミステリータグに該当するユーザーは11057人で、一ページあたり10人表示されているので次のようなforループを作る

users=[]
ulr='http://booklog.jp/profiletag/%E3%83%9F%E3%82%B9%E3%83%86%E3%83%AA%E3%83%BC?page=pagenumber'
for pagenumber in range(1,1106):
  f=urllib.urlopen(url+str(pagenumber))
  src=f.read()
  src=unicode(src,'utf-8')
  ret=re.findall(ur'/users/(?P<name>[^/]*)/profile',src)
  for u in ret:
    users.append(u)
print users