BeautifulSoupでTwitter人気アカウント情報抽出

gvim

お疲れ様です。富沢です。

無駄に徹夜をしてしまい本日マネージャーの前で涎を垂らしてしまいました。いや、指は止まってなかったから大丈夫だと思います。

 

とまぁ万年アナリストへの布石の話は以上にして、PythonとBeautifulSoupでTwitter人気アカウントの情報引っこ抜いてきました。BeautifulSoupはバージョン3です。

まず結果がこちら

res

いわゆるスクレーピングというやつですかね。

結構便利なんですよスクレーピング。ネット上に落ちてる大量の情報をさっと手中にできるので。

Lancersとかにもスクレーピング案件がたまにあって、お小遣い稼ぎにもなります(○○県のコンビにの情報引っこ抜き、など)。

んで今回のテーマは、以前ブログやってる友人から「Twitterでアカウント増やすにはどうしたらいいのかな」と相談がありまして、とりあえず上位陣の情報抽出して共通点見つければなんかなるんじゃないかなと思い作ったものがベースになってます。

人気アカウントてTwitter.comからとるの?なわけなくてmeyou.jpさんから取ってきました

拙いものですが、ソース、以下になります。


#! /usr/bin/env python
 # -*- coding:utf-8 -*-

from BeautifulSoup import *
 import urllib
 import time
 import re
 import csv

#アカウントデータ保存用クラス
 class account:
 #データ格納
 def __init__(self,name,at,url,abst,follow,followed):
 self.name = name #名前
 self.at = at #@○○
 self.url = url #URL
 self.abst = abst #概要
 self.follow = follow #フォロー数
 self.followed = followed #フォロワー数

#取得データ確認用
 def echo(self):
 print self.name,self.at,self.url,self.abst,self.follow,self.followed

#リストで出力用
 def putList(self):
 return [self.name,self.at,self.url,self.abst,self.follow,self.followed]

#アクセスURLリスト
 url_list = ["http://meyou.jp/ranking/follower_blogger",
 "http://meyou.jp/ranking/follower_blogger/50",
 "http://meyou.jp/ranking/follower_blogger/100",
 "http://meyou.jp/ranking/follower_blogger/150"]

#アカウント格納用リスト
 accts = []

for url in url_list:
 html = urllib.urlopen(url)
 soup = BeautifulSoup(html.read())

#タグ抽出
 auth_name = soup.findAll('span', {'class':"author-name"}) #名前
 user_name = soup.findAll('span', {'class':"author-username"}) #ユーザネーム
 abst = soup.findAll('div', {'id':"sideBreak4"}) #概要
 follow = soup.findAll('td', {'class':"col4"}) #フォロー数
 followed = soup.findAll('td', {'class':"col5"}) #フォロワー数

for i in range(len(auth_name)):
 #リテラル初期化(一応)
 name = ''
 usname = ''
 url = ''
 ab = ''
 fl = ''
 fled = ''
 #以降、正規表現で無理やりターゲットを抽出
 m = re.search("http.*?>(.*?)<", str(auth_name[i]))
 if m:
 name = m.group(1)
 m = re.search('(http.*?)"',str(auth_name[i]))
 if m:
 url = m.group(1)
 m = re.search("http.*?>(.*?)<",str(user_name[i]))
 if m:
 usname = m.group(1)
 m = re.search('<div id="sideBreak4">\r\n\r\n\t\t\t\t\t\t\t\t\t(.*?)\r\n\r\n\t\t\t\t\t\t\t\t</div>',str(abst[i]))
 if m:
 ab = m.group(1)
 m = re.search('<td class="col4">(.*?)</td>',str(follow[i]))
 if m:
 fl = m.group(1)
 m = re.search('<td class="col5"><span class="red">(.*?)</span></td>',str(followed[i]))
 if m:
 tmp = m.group(1)
 fled = tmp.replace(",","")
 accts.append(account(name, usname, url, ab,fl,fled))

#CSVへ出力
f = open('tw.csv','w')
 w = csv.writer(f)
 for x in accts:
 w.writerow(x.putList())
 f.close()

 


そもそもBeautifulSoupとは?

Beautiful Soupはpythonで動作するHTMLとXMLのパーサーです。Beautiful Soupはパースしたツリーの操作、検索、変更を簡単に、かつ、今までと同じ方法でできます。これにより、プログラマーの仕事時間を節約します。また、Rubyful SoupというRuby版もあります。

(http://tdoc.info/beautifulsoup/

だそうです。パーサってのは、HTMLとかってあるじゃないですか、これの文法(divとかpとか)を解析して、プログラムで扱えるようにしてくれるやつ、って認識で良いと思います。多分。

なので、おいしいスープはHTMLとかをパース(解析)して、プログラマが扱いやすいようなかたちにこさえてくれるライブラリ。例えばtdタグ、xxxクラス抽出とか。(findAllとか使って)

BeautifulSoupのインストールはいたるところにTipsが落ちてるから割愛させていただきますね。

 

ちなみにスクレーピングってDOS攻撃扱いにもなりかねないからアクセスする際はtime.sleep(1)とかかませましょうね。決していたずらなどには使わないようにしてくださいね。

 

疲れたのでこのへんで…

 

以上、よろしくお願いします。

Share Button

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です