Pythonスクレイピングメモ

  • 35
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Pythonでスクレイピングをする時に使えるツールなどのメモです。

requests - Webからデータを取得する

PythonでWebへのアクセスをする時に最も手軽な方法は requests を使う方法です。pipでインストールできます。
GETとPOSTはrequests.getとrequests.postを使えば大体事足ります。

インストール

$ pip install requests

詳しくはこちらを参照してください。
http://requests-docs-ja.readthedocs.org/en/latest/

BeautifulSoup4 - HTMLを解析する

HTMLを解析するにはBeautifulSoup4を使うと良いでしょう。

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<div><h1 id="test">TEST</h1></div>', 'html')
>>> soup.select_one('div h1#test').text
'TEST'

タグ内の文字はsoup.textで、属性にはsoup['id'] (idのところは属性名)でアクセスできます。

BeautifulSoup objectのよく使うmethod

  • BeautifulSoup.find() -> タグを検索して最初にhitしたタグを返す
  • BeautifulSoup.find_all() -> タグを検索してhitしたタグのリストを返す
  • BeautifulSoup.find_previous() -> 一つ前のタグを返す
  • BeautifulSoup.find_next() -> 一つ後ろのタグを返す
  • BeautifulSoup.find_parent() -> 親タグを返す
  • BeautifulSoup.select() -> css selectorでタグのリストを返す
  • BeautifulSoup.select_one() -> css selectorで検索して最初にhitしたタグを返す

詳しくはこちらを参照してください。
http://kondou.com/BS4/

データの永続化

CSV形式

CSVはカンマで区切られた形式のファイルです。csvモジュールが使えます。
csv モジュールのさらに詳しい内容についてはこちらを参照してください。
http://docs.python.jp/3.4/library/csv.html

書き込み

import csv
with open('some.csv', 'wb') as f:
    writer = csv.writer(f)
    writer.writerows(someiterable)

読み取り

import csv
with open('some.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        print row

JSON形式

JSON形式もよく使われる形式です。標準モジュールの json モジュールを使用します。

>>> import json
>>> json.dumps([1, 2, 3, 4])
'[1, 2, 3, 4]'
>>> json.loads('[1, 2, 3, 4]')
[1, 2, 3, 4]
>>> json.dumps({'aho': 1, 'ajo': 2})
'{"aho": 1, "aro": 2}'
>>> json.loads('{"aho": 1, "ajo": 2}')
{u'aho': 1, u'aro': 2}
  • json.dumps() -> オブジェクトをJSON文字列にする
  • json.loads() -> JSON文字列をオブジェクトにする
  • json.dump() -> オブジェクトをJSON文字列にしてそれをファイルに書き込む
  • json.load() -> ファイル内のJSON文字列を読み込んでオブジェクトにする

詳しい内容についてはこちらを参照してください。
http://docs.python.jp/3.4/library/json.html

サンプル

スクレイピングのサンプルとしていくつか準備しています。参考にしてください。ただし一般のサイトもあるのでリクエストをバンバン投げることはやめてください。
間違ってもループをそのまま回したらダメですよ。

他にも良さそうなサイトはいっぱいありそう...