try:
except (ConnectionError, ChunkedEncodingError, TooManyRedirects, NewConnectionError) as e:
logging.warn("Skip URL {} Reason: {}".format(url, e))
SQLiteでは upsert をするときは replace を使う。
$ sqlite3 foo.db
テーブルのスキーマを見る。未指定の場合全スキーマ。
sqlite3 モジュールを使う。
import sqlite3
conn = sqlite3.connect(db_path)
c = conn.cursor()
# ...処理...
# コミットが必要なら conn.commit()
conn.close()
SQL文一行実行。複数行は executescript() を使う。
cursor.execute('replace into tbl_a(url, title) values (?,?)', (url, title))
タプルで渡すことに注意。
結果が1行でも当然タプルなので、中の値だけ使う場合は一度取り出す必要がある。
ファイルのまま渡すことができないので一度読み出して executescript() で渡す。
f = open(sql_file)
script = f.read()
f.close()
c.executescript(script)
conn.commit()
logging モジュールを使う。
import logging
logging.getLogger().setLevel(logging.DEBUG)
ログを書き込みたい場合は以下のように書く。
logging.info("adding URL to DB: {}".format(url))
import requests
from bs4 import BeautifulSoup
r = requests.get(url)
soup = BeautifulSoup(r.content, "lxml")
for td in soup.find_all("td", attrs={"class": "someClassInThePage"}):
href = td.find("a")
title = href.text
Chromeの検証で楽に探せる。
$ pylint -E foo.py
$ autopep8 foo.py