SQliteでDBを用意していきます。
これはスクレイピング時に、このURLって処理したかな?とか、連続でURLを処理していく時にフラグを立てて、やったやってないを判定するのに使っています。
【Python】非プログラマーのためのスクレイピング講座目次(Colaboratory)
注意
私は、別に綺麗にプログラムを書けるわけでも、知識豊富なわけでもありません。
このコンテンツは、気軽に触って学べれば、あとは自分で頑張るって人を応援するコンテンツです。
Colaboratoryを使って環境構築や個々人の環境の差をなくしています。
Colaboratoryは速いです。
SQLite?(適当解説)
データベースを作る際に、お勤めの会社ではおそらくDBサーバを立てていると思います。
これはアプリという単位でお手軽です。
実際にスマホアプリでも使います。
SQLiteのライセンスはパブリックドメインになっており、利用に際しライセンス問題は意識せず利用できます。
DB作る前に
ColaboratoryとGoogle Driveを連携します。
ドライブをマウント(読み込んで)して、そのフォルダにDBファイルを格納します。
以下の場合は、Google Drive直下のColab Notebooksフォルダの中のsampleフォルダをマウント。
from google.colab import drive drive.mount('/content/drive/') %cd "/content/drive/My Drive/Colab Notebooks/sample/"
DB作る魔法の言葉
魔法の言葉。
import sqlite3
DB作る関数
適当に関数作っておく。
この場合は、URLというデータの列が常にかぶりのないユニークな値になり、タイトルはサイトタイトル、フラグは処理したしないのフラグなどに使います。
テーブル名の指定で変数を使いたい時に、いろいろやりかたはありますが、以下は例のひとつ。
def db_make(db_name,table_name): conn = sqlite3.connect(db_name) cur = conn.cursor() cur.execute("CREATE TABLE IF NOT EXISTS %s (URL unique,title,flag)" % table_name) conn.commit() conn.close()
DBのテーブルをチェックする関数
適当に関数作っておく。
私のように常軌を逸したぼーっとした人だと、適当な名前でテーブル名を作ってしまい、DB内が散らかります。
そのため、DB内のテーブル一覧を出力できる関数を常に用意しています。
クライアントも間違うこともあるので、納品物に入れておくと便利だった。
def db_tb_check(db_name,table_name): conn = sqlite3.connect(db_name) cur = conn.cursor() cur.execute("select name from sqlite_master where type='table'") for x in cur.fetchall(): print(x) conn.close()
DBのテーブルを削除する関数
絶対に間違えて実行しないように。
def db_deldel(db_name,table_name): conn = sqlite3.connect(db_name) cur = conn.cursor() cur.execute('DROP TABLE {}'.format(table_name)) conn.commit() conn.close()
DB名(ファイル名)とテーブル名を決める入力欄を用意
#DB作成 db_name = "mkp_sample.db"#@param {type:"string"} table_name = "mkp_01_tb"#@param {type:"string"}
各プログラムの実行方法
db_make(db_name,table_name) db_tb_check(db_name,table_name) db_deldel(db_name,table_name)
実際の運用はClass化して別ファイルにしています。
しかし、テスト時はClassファイルの更新後の読み込みに不具合が出ることがあるため、直接書いたりします。
※リロードしてもダメな時がごくたまにある
当サイトはリンクフリーです。
ご自身のブログでの引用、TwitterやFacebook、Instagram、Pinterestなどで当サイトの記事URLを共有していただくのは、むしろありがたいことです。
事前連絡や事後の連絡も不要ですが、ご連絡いただければ弊社も貴社のコンテンツを紹介させていただく可能性がございます。