前提・実現したいこと
requestsとBeautifulSoupをインポートするとprintの結果がブラウザに表示されず真っ白です。requestsとBeautifulSoupの二つをコメントアウトすると表示されます。二つのモジュールをコメントアウトした時のようにprintの結果をブラウザの画面上に表示したいです。
該当のソースコード
index.py
1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3 4import cgi # CGIモジュールのインポート 5import cgitb 6import sys 7import requests 8from bs4 import BeautifulSoup 9 10cgitb.enable() # デバッグに使うので、本番環境では記述しない 11 12form = cgi.FieldStorage() # フォームデータを取得する 13 14print("Content-Type: text/html; charset=UTF-8") # HTMLを記述するためのヘッダ 15print("") 16 17# フォームのデータが入力されていない場合 18if "url" not in form: 19 print("<h1>Error!</h1>") 20 print("<br>") 21 print("テキストを入力してください!") 22 print("<a href='/'><button type='submit'>戻る</button></a>") 23 sys.exit() 24 25url = form.getvalue("url") # データの値を取得する 26 27r = requests.get(url) 28r.encoding = r.apparent_encoding # 呪文 29soup = BeautifulSoup(r.text, 'html.parser') 30title = soup.find("meta", property="og:title") 31description = soup.find("meta", property="og:description") 32image = soup.find("meta", property="og:image") 33print(title['content']) 34print(description['content']) 35print(image['content'])
cgiserver.py
1import http.server 2http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)
index.html
1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="utf-8"> 6 <title>Test Page</title> 7 <style> 8 h1 { 9 text-align: center; 10 } 11 12 .container { 13 width: 300px; 14 margin: 0 auto; 15 text-align: center; 16 } 17 18 input { 19 width: 300px; 20 padding: 10px 20px; 21 margin-bottom: 10px; 22 } 23 24 button { 25 padding: 5px 30px; 26 border-radius: 5px; 27 } 28 </style> 29</head> 30 31<body> 32 <h1>URLを探す</h1> 33 <div class="container"> 34 <form action="cgi-bin/index.py" method="post"> 35 <input type="text" name="url" placeholder="url"> 36 <button>探す</button> 37 </form> 38 </div> 39</body> 40 41</html>
試したこと
pip showコマンドで当該モジュールのインストールの確認
補足情報(FW/ツールのバージョンなど)
Python 3.10.1
> requestsとBeautifulSoupをインポートするとprintの結果がブラウザに表示されず真っ白です。
CGI で、実行した際に画面が真っ白になるのは、 Pythonスクリプトを実行した際にエラーが発生していると考えられます。
Webサーバーのログには、どのようなエラーメッセージが記録されているでしょうか。 ( Import 文をコメントにすると実行できるということなので、 ImportError の可能性が高いと思いますが... )
172.17.0.1 - - [18/Jan/2022 08:18:54] CGI script exit code 1
172.17.0.1 - - [18/Jan/2022 08:18:58] "POST /cgi-bin/index.py HTTP/1.1" 200 -
Traceback (most recent call last):
File "/app/cgi-bin/index.py", line 8, in <module>
from bs4 import BeautifulSoup
ModuleNotFoundError: No module named 'bs4'
172.17.0.1 - - [18/Jan/2022 08:18:59] CGI script exit code 1
172.17.0.1 - - [18/Jan/2022 08:19:01] "POST /cgi-bin/index.py HTTP/1.1" 200 -
172.17.0.1 - - [18/Jan/2022 08:27:41] "POST /cgi-bin/index.py HTTP/1.1" 200 -
Traceback (most recent call last):
File "/app/cgi-bin/index.py", line 7, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
このようなエラーがありました
追記
上記の二つのモジュールを確認すると、bs4のみインストールされてないためインストールしました。しかしrequestsはインストール済みなのにエラー表示されます。
bs4とrequestsをインストールしましょう。
otnさん
コメントありがとうございます。上でも書きましたがbs4はインストールしましたが、requestsはすでにインストールされているのにエラー表示されました
すでにインストール済みで ModuleNotFoundError が出るのであれば、複数の Python がインストールされていないでしょうか。
pip でインストールした Python と別の Python で動かしていませんか? CGI で使用している方の Pythonにインストールしてみてください。
使用しているPythonにインストールされているかどうかはどのように確認するのでしょうか?
回答2件
あなたの回答
tips
プレビュー