LoginSignup
1
7

More than 3 years have passed since last update.

[Python3]スクレイピング虎の巻

Last updated at Posted at 2019-11-30

何回もスクレイピングをやってだいたいわかってきたので、備忘録としてここに書いておこう。

使う言語はタイトルの通り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に保存

途中

1
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
7