目的
ロリポップのWEBサーバー上でPythonのBeautifulSoup4やyfinanceなどのモジュールを動かそうとしたが、うまく動作せず大変苦労したので、導入方法をこちらに記載します。
ロリポップのハイスピードプランを使用しています。
pipをインストールする
まず初めにpipをインストールする必要があります。
pipをインストールするにはコマンドプロントやPowerShellにてSSH接続を行う必要がある。
ロリポップの管理画面を開き、「サーバーの管理・設定」から「SSH」のページを開く。
画面からSSHを有効にする。
その後コマンドプロントを開いて、SSH接続を行う。
「SSH」のページで接続ポート、アカウント、サーバーの値を確認し、
ssh -p 接続ポート アカウント@サーバー
の形式で入力する。
ssh -p 接続ポート アカウント@サーバー password:
と表示されるのでSSHパスワードを入力する。
ここのpasswordは入力しても、文字が表示されない仕様なので、驚かないように注意してほしい。
SSH接続ができたらpipをインストールする。
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py --user
次にPATHを通す必要があります。
pwdと入力し、ファイルの階層(/home/users/番号/ユーザー名)がでてくるのでそれ確認する、その階層は直後に入力することになる。
次に
vi .bash_profile
と打ち込んで、vimを開始し、PATHを通す。
~がたくさん出てくるので~の上のほうに
PATH=$PATH:/home/users/番号/ユーザー名/.local/bin
export PATH
と入力
ESCを押した後、「:wq」と打ち込むと~の下に文字が入る。
正しく~の下に:wqが入ったことを確認したらEnterを押す。
source .bash_profile
と入力する。
pipがインストールできたか確認してみましょう。
pip3 list
これでモジュールの一覧が表示されれば問題なし。
必要なモジュールのインストール
BeautifulSoup4やyfinanceなどの欲しいモジュールをインストールする。
pip3 install BeautifulSoup4 yfinance
無事インストールされるはずです!
しかし、このままではそれらのモジュールをインポートすることができません。
というのもロリポップのOpenSSLはOpenSSL 1.0.2k-fips 26 Jan 2017というものを使用しており、それが互換性の問題でurllib3モジュールを動作できなくしているのだ。
この問題を解決するために、urllib3をダウングレードする必要がある。
pip3 uninstall urllib3
pip3 install urllib3==1.26.18
これにてBeautifulSoup4やyfinanceなどのモジュールが問題なく動作するはずだ。
備考
モジュールがインポートできず500エラーが表示される場合、下記のコードでimportの箇所を覆うことでエラーの原因を表示することができる。
#!/usr/local/bin/python3.7
# -*- coding: utf-8 -*-
print ("Content-Type: text/html; charset=utf-8\n\n")
import traceback
try:
# 処理内容
from bs4 import BeautifulSoup
except Exception as e:
# エラー処理
error_message = traceback.format_exc()
print(error_message)
CGIファイルを作成
ロリポップはpythonファイルをそのままCGIとして表示することができる。
CGIファイルを表示させるのにもいくつものトラップが存在する。
まず改行はLFで行われないとエラーとなるので、メモ帳等で編集するのは危険である。
以下はBeautifulSoup4が機能するかテストするためのコードです。
こちらをpyファイルで保存し、FTPでアップロードしてください。
パーミッションは755です。
#!/usr/local/bin/python3.7
# -*- coding: utf-8 -*-
# エラー時に不具合箇所を表示
import cgitb
cgitb.enable()
print ("Content-Type: text/html; charset=utf-8\n\n")
import requests
from bs4 import BeautifulSoup
# ウェブサイトのURLを指定
url = "https://www.google.com/"
# リクエストを送信してレスポンスを取得
response = requests.get(url)
# レスポンスのステータスコードを確認
if response.status_code == 200:
# レスポンスが成功した場合
print("Beautiful Soup 4 は正常に動作しています。")
# HTMLコンテンツを解析
soup = BeautifulSoup(response.content, 'html.parser')
# タイトルタグのテキストを取得して表示
title = soup.find('title').text
print(f"タイトル: {title}")
else:
# レスポンスが失敗した場合
print(f"Beautiful Soup 4 の動作確認に失敗しました。 ステータスコード: {response.status_code}")
文字コードはファイル自体の文字コードとWEBサイト上の文字コードを両方していしないと正しく表示されない。(# -*- coding: utf-8 -*-と charset=utf-8)
cgitbやtracebackモジュールのコードを入れることでエラー発生時に500エラー画面ではなく、エラーの原因が表示されます。つまりデバッグの結果が画面に表示されるというわけです。
アップロードができたら、pyファイルをURLから指定して、開くと動作するはずです。
コメント