Pythonクローリング&スクレイピング[増補改訂版] ―データ収集・解析のための実践開発ガイドー その5
第3章 ライブラリによる高度なクローロング・スクレイピング
feedparser で RSS を解析
feedparser は RSS1.0 や RSS2.0 などに対応しているので、RSS のフォーマットの種類を気にせずにスクレイピングを行えます。
import feedparser # はてなブログのテクノロジーカテゴリーの RSS rss = feedparser.parse('https://b.hatena.ne.jp/hotentry/it.rss') for entry in rss.entries: print(entry.link, entry.title)
SQLite3
スクレイピングで得たデータを保存するためにリレーショナルデータベースを使います。Python には標準ライブラリとして sqlite3 が組み込まれています。
import sqlite3 conn = sqlite3.connect('world_population.db') cur = conn.cursor() # excute()メソッドでSQL文を実行する # country テーブルがあるとき削除する cur.execute('DROP TABLE IF EXISTS countries') # country テーブルを作成 cur.execute(""" CREATE TABLE countries ( rank integer, country text, population integer ) """) cur.execute('INSERT INTO countries VALUES (?, ?, ?)', (1, '中国', 1411)) # パラメータを辞書で指定する cur.executemany('INSERT INTO countries VALUES (:rank, :country, :population)', [ {'rank': 2, 'country': 'インド', 'population': 1324}, {'rank': 3, 'country': 'アメリカ', 'population': 322}, ]) conn.commit() cur.execute('SELECT * FROM countries') for row in cur.fetchall(): print(row) conn.close()
MySQL
クライアント・サーバー型のリレーショナルデータベースの MySQL を使います。SQLite よりも大規模なデータに対して性能が発揮できることが特徴です。
データベースとユーザの登録
mysql を起動してデータベースとユーザを登録します。root ユーザで MySQL サーバに接続するときは、MySQL をインストールしたときに設定したパスワードが必要になります。
CREATE DATABASE scraping DEFAULT CHARACTER SET utf8mb4; CREATE USER scraper@localhost IDENTIFIED BY 'password'; GRANT ALL ON scraping.* TO scraper@localhost;
Python で MySQL を利用
import MySQLdb conn = MySQLdb.connect(db='scraping', user='scraper', passwd='password', charset='utf8mb4') cur = conn.cursor() cur.execute('DROP TABLE IF EXISTS countries') cur.execute(""" CREATE TABLE `countries` ( rank integer, country text, population integer ) """) cur.execute('INSERT INTO `countries` VALUES (%s, %s, %s)', (1, '中国', 1411)) # パラメータを辞書で指定する cur.executemany('INSERT INTO `countries` VALUES (%(rank)s, %(country)s, %(population)s)', [ {'rank': 2, 'country': 'インド', 'population': 1324}, {'rank': 3, 'country': 'アメリカ', 'population': 322}, ]) conn.commit() cur.execute('SELECT * FROM `countries`') for row in cur.fetchall(): print(row) conn.close()
本
Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド
- 作者: 加藤耕太
- 出版社/メーカー: 技術評論社
- 発売日: 2019/08/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
感想
データベースは異なっても共通している文法なので、一つの SQL の使い方を覚えれば他のデータベースも使えるようになると思いました。