pythonでスクレイピング
入門ソーシャルデータにBeautifulSoupを使ってスクレイピングをしている例がありました。
BeautifulSoupはrubyでいうMechanizeやNokogiriに相当するライブラリです。
http://www.crummy.com/software/BeautifulSoup/
初めて使用したので基本的な使い方をメモしておきます
インストール
pip install beautifulsouop
とくに問題なかったです
使用方法
基本は以下のような感じで、urllib2.urlopenでインスタンスを取得してから、それをBeautifulSoupのコンストラクタに渡します
import urllib2 import HTMLParser from BeautifulSoup import BeautifulSoup page = urllib2.urlopen("http://example.com") soup = BeautifulSoup(page) # findAll - aタグのリストを取得 anchorTags = soup.findAll('a') # 各要素はBeautifulSoup.Tagのインスタンス tag = anchorTags[0] # タグ名取得 print(tag.name) # => u'a' # 属性の有無を取得 print(tag.has_key('href') # => True print(tag.has_key('rel') # => False # 属性値を取得 print(tag['href']) # => 'help.txt' print(tag['rel']) # => KeyError
入門ソーシャルデータではXFNデータをマイニングするのにBeautiulSoupを使ってます。
一部抜粋
anchorTags = soup.findAll('a') for a in anchorTags: if a.has_key('rel'): if len(set(a['rel'].split()) & XFN_TAGS) > 0: tags = a['rel'].split() print a.contents[0], a['href'], tags
findAllでaタグをすべて取得してから、rel属性にXFNの値を持っているタグの情報だけ表示してます。
findAllはキーワード引数を渡すことによって、あらかじめ属性の有無や属性値での絞り込みができますので、以下のように書いても同じです
anchorTags = soup.findAll('a', rel=True) for a in anchorTags: if len(set(a['rel'].split()) & XFN_TAGS) > 0: tags = a['rel'].split() print a.contents[0], a['href'], tags
キーワード引数の値にTrueを渡すと、属性が設定されていれば返します。
また、キーワード引数の値にcallableなオブジェクトを渡すこともできます。
anchorTags = soup.findAll('a', rel=lambda(value): value and len(set(value.split()) & XFN_TAGS) > 0) for a in anchorTags: print a.contents[0], a['href'], a['rel'].split()
入門 ソーシャルデータ ―データマイニング、分析、可視化のテクニック
- 作者: Matthew A. Russell,奥野陽(監訳),佐藤敏紀(監訳),瀬戸口光宏(監訳),原川浩一(監訳),水野貴明(監訳),長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/11/26
- メディア: 大型本
- 購入: 18人 クリック: 779回
- この商品を含むブログ (42件) を見る