scrapyの導入と標準入出力で躓いたこと

結論

  1. ライブラリのインスコ
  2. Pythonの再インスコ
  3. 環境変数の設定
  4. settingsの追記

環境

CentOS 6 Python 3.6.4 Scrapy 1.5.0

経緯

Scrapyを仮想環境で試そうとしたところ、環境を整え直す羽目になったのでφ(..)メモメモと。

発生した問題

ModuleNotFoundError: No module named ‘_sqlite3'

scrapy shellを実行したところ、以下のエラーが発生。 SQLite3の開発用ツールとPython3の再インスコが必要。

()
  File "/home/vagrant/.pyenv/versions/3.6.4/lib/python3.6/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'

標準入出力の文字化け

cssセレクタを使い日本語の抽出を行ったところ、文字化けが発生。 こちらは環境変数エンコーディングの指定が必要。

対応方法

ModuleNotFoundError: No module named ‘_sqlite3'

SQLite開発用ツールを入れた後改めて、Pythonコンパイル、インストール。

sudo yum install sqlite-devel -y
sudo rm -rf ~/.pyenv/shims/
/bin/bash -lc "pyenv install 3.6.4 && pyenv rehash && pyenv global 3.6.4"

標準入出力の文字化け

標準入力/標準出力/標準エラー出力環境変数の上書き指定。 bashrcに追記。

export PYTHONIOENCODING=utf-8

おまけ

ファイルやjsonを使用した際の出力でも文字化けが起こるので以下の設定をsettings.pyへ追記する。

FEED_EXPORT_ENCODING = 'utf-8'

参考

pythonにsqlite3が無いと怒られる - よしだです

Python 3の各種エンコーディングについて - Qiita

1. コマンドラインと環境 — Python 3.6.4 ドキュメント