前提・実現したいこと
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
回答2件
あなたの回答
tips
プレビュー