何回もスクレイピングをやってだいたいわかってきたので、備忘録としてここに書いておこう。
使う言語はタイトルの通りPython、何と言ってもBeautifulSoupが便利すぎる!
インポート
インポートするのはだいたいこれだ
import json
import os
import requests
import requests_cache
from bs4 import BeautifulSoup
- json: 取得したデータの保存用に
- os: ディレクトリ操作とかに
- requests: 便利なファイル取得
- requests_cache: キャッシュとしてローカルにデータを貯められる
- BeautifulSoup4: 神器
定数
UserAgentはスクレイピングには必要だ
HEADERS = {'User-Agent': 'Mozilla/5.0'}
関数
soupを取得する関数
いろいろ試したけど、lxml
が一番しっくりくる。
もし取得でうまくいかない時は、これを変えよう。
html5lib
なんかはブラウザとほぼ同じに解析してくれる。
もし取得済みの場合はキャッシュのデータを使うようにする。
サーバへの無駄な負担は出来る限り減らす。
def get_soup(url):
# キャッシュを使う
requests_cache.install_cache()
response = requests.get(url, headers=HEADERS)
return BeautifulSoup(response.content, 'lxml')
CSSで取る
soupから目的のタグを取る時はCSSセレクタを使用する。
links = soup.select('div#menu div.box a')
Chromeやsafariの開発モードで$$('div#menu div.box a')
とか入力すればデバッグできる。
いろいろな要素を取る
上記で抽出したものから要素を取る
for link in links:
link.string # aタグで囲まれたテキストがとれる
link.get('href') # hrefのリンクがとれる
テキストの中身をごっそり取る場合にはlink.get_text()
でもいい。
これらをだいたいゴニョゴニョやる!
スクレイピングした情報を保存する
だいたい以下のように保存する。
- ファイルに保存(.json, .jpgとか)
- DBに保存(だいたいSQLite)
ファイルに保存
途中
DBに保存
途中