デプロイ済みの Scrapy プロジェクトでプロキシリストを含めて読み込む
Scrapy のプロキシリストリソースを配布物に含め、デプロイ済みの作業ディレクトリではなくパッケージの場所から読み込みます。
開発用チェックアウトの隣にあるプロキシファイルは、クローラーのデプロイ済みパッケージに自動的に存在するわけではありません。作業は 2 つあります。バイトを配布物に含め、次にインストール済みパッケージ内でそれらを見つけることです。
Python パッケージ内に crawl_app/resources/proxies.txt を持つ Setuptools プロジェクトでは、pyproject.toml のエントリでそれを含められます:
[tool.setuptools.package-data]
crawl_app = ["resources/*.txt"]
これをプロジェクトの既存のパッケージ設定と統合してください。別のビルドバックエンドには独自のデータ包含インターフェースがあります。
エンドポイント文字列を利用できるミドルウェアなら、Python 3.11+ はパッケージリソースを直接読めます:
from importlib.resources import files
text = files('crawl_app').joinpath('resources', 'proxies.txt').read_text(
encoding='utf-8'
)
proxy_urls = [line.strip() for line in text.splitlines() if line.strip()]
実際のパッケージ名を使い、リーダーで想定される URL 形式を検証してください。配布可能な公開エンドポイントデータには、ミドルウェアが想定するプロトコルと URL 形式で無料プロキシリストのアドレスを使用します。検索はデプロイの現在の作業ディレクトリに依存しません。
サードパーティの PROXY_LIST 設定では、これらの文字列ではなくファイルシステムのパスが必要になる場合があります。そのインターフェースに importlib.resources.as_file を使う場合、ミドルウェアが抽出されたファイルを必要とする間はそのコンテキストを開いたままにします。コンテキストを閉じた後に一時パスを返すと、リソースを失う可能性があります。
資格情報を含む本番リストは、デプロイ用に意図されたシークレットまたは設定ストレージに保管してください。パッケージデータは配布可能なエンドポイントデータに適していますが、コードと同梱されたすべてが非公開であり続けるという前提ではありません。