首页 > 编程问答 >使用 Flask 时,为什么这个 html 模板不能在 Web 浏览器中呈现抓取的网站数据?

使用 Flask 时,为什么这个 html 模板不能在 Web 浏览器中呈现抓取的网站数据?

时间:2024-07-27 13:22:38浏览次数:6  
标签:python html flask web-scraping

每当我在终端中打印出抓取的数据时,它都会很好地显示抓取的数据,但每当我尝试使用 Python Flask 提供它时,我使用的 HTML 模板不会在 Web 浏览器中呈现数据。如果您能帮我修复此代码。

Python(Flask)文件:

from flask import Flask, render_template
from bs4 import BeautifulSoup as BS
import requests

src = requests.get('https://webscraper.netlify.app/').text


scraper = BS(src, 'lxml')

# head = scraper.find('main').select_one('article:nth-of-type(4)').div.text
# author = scraper.find('main').select_one('p').text

head = scraper.body.header.h1.text

snd_author = scraper.body.main.select_one('article:nth-of-type(2)').p.text

fst_article = scraper.body.main.article.div


app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html', **locals())

app.run(debug=True)

HTML(视图)文件:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=2.0"/>
    <title>Python Flask Web Scraper</title>
  </head>
  <body>
    <!-- Python Flask Variables go here: -->
    
    <h1> {{ head }} </h1>

    <p>{{ snd_author }}</p>
    
    <article>{{ fst_article }}</article>
    
  </body>
</html>

问题出在尝试直接在 HTML 模板中呈现 fst_article (这是一个 BeautifulSoup 对象)这一事实。Flask 模板引擎(Jinja)不知道如何直接呈现 BeautifulSoup 对象。

可以通过以下两种主要方法来解决此问题:

方法 1:在 Python 代码中提取和传递文本内容

这是更安全、更推荐的方法。与其传递整个 BeautifulSoup 对象,不如先提取想要在 HTML 模板中显示的文本内容。

from flask import Flask, render_template
from bs4 import BeautifulSoup as BS
import requests

src = requests.get('https://webscraper.netlify.app/').text
scraper = BS(src, 'lxml')

head = scraper.body.header.h1.text
snd_author = scraper.body.main.select_one('article:nth-of-type(2)').p.text
# 从 fst_article 对象中提取文本内容
fst_article_content = scraper.body.main.article.div.text 

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html', 
                           head=head, 
                           snd_author=snd_author, 
                           fst_article=fst_article_content)

app.run(debug=True)

在的 HTML 模板中,可以像这样使用 fst_article

&lt;article&gt;{{ fst_article }}&lt;/article&gt;

方法 2:将 BeautifulSoup 对象转换为字符串(风险更大)

警告: 此方法可能存在安全风险,因为它可能会呈现来自抓取网站的意外 HTML 和 JavaScript,从而导致跨站点脚本 (XSS) 攻击。如果确定抓取的内容是安全的,则只能使用此方法。

在这种方法中,可以直接在 Python 代码中将 fst_article 对象转换为字符串:

from flask import Flask, render_template
from bs4 import BeautifulSoup as BS
import requests

# ... (其他代码相同)

fst_article = str(scraper.body.main.article.div)

# ... (其他代码相同)

然后,可以在 HTML 模板中按原样使用 fst_article

建议:

  • 优先考虑方法 1, 因为它更安全,并且可以更好地控制在 HTML 模板中呈现的内容。
  • 如果 必须 使用方法 2,请确保了解所涉及的安全风险,并对抓取的内容进行适当的清理和验证。

通过这两种方法中的任何一种,的 Flask 应用程序现在都应该能够在 Web 浏览器中正确呈现抓取的网站数据。

标签:python,html,flask,web-scraping
From: 71043919

相关文章

  • html+css 实现水波纹按钮
    前言:哈喽,大家好,今天给大家分享html+css绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • 我没有 python 但我有 python3
    我最近格式化了我的笔记本电脑并安装了Ubuntu操作系统。我没有明确安装Python。为了检查它是否已预安装,我在终端中运行python--version并得到了这个:$python--versionCommand'python'notfound,butcanbeinstalledwith:sudoaptinstallpython3......
  • 基于YOLOv9的停车场空闲车位检测【python源码+UI界面+数据集+模型+语音报警+安装说明
    往期精品导航基于YOLOv9的脑肿瘤区域检测智慧课堂基于YOLOv8的学生上课行为检测基于YOLOv9+pyside的安检仪x光危险物物品检测(有ui)基于YOLOv9的PCB板缺陷检测基于YOLOv9的线路绝缘子缺陷检测【python源码+UI界面+数据集+模型+语音报警+安装说明】基于YOLOv9的道路状况检测【......
  • 1-python的数据类型与变量
    一、交互模式与脚本模式交互模式:就相当于一种问答模式,关闭即消失无法保存重用比如python自带的编译器脚本模式:可以将代码长期保存以及重复使用如何创建脚本模式:idle——file——newfile[快捷方式:idle——ctrl+n]保存:ctrl+s运行:F5二、变量(Variable)变量:会变化......
  • 2-Python数据类型——序列
    Python数据类型——序列一、序列序列是一个可以存放多个值的容器。有序序列:在序列中每个值都有对应的下标下标:就相当于酒店的房间号,方便客人的查找与酒店的管理在编程中下标的起始值与日常生活中的计数有所不同:下标的计数从0开始计数,从左往右计数:下标从0开始往右递......
  • crontab 运行 .sh 文件调用 python 脚本
    我有一个pythonselenium脚本,可以打开chrome并为我运行一些自动化任务。在crontab中直接调用python可以使用下面的行。:10.0是我运行echo$DISPLAY时得到的值。我使用的是Ubuntu22.04.4LTS5823**2DISPLAY=:10.0/usr/bin/python3/home/user/Script......
  • Pythonanywhere - ping:套接字:不允许操作
    请帮忙。我有一个Telegram机器人,当我从Bash控制台启动他时,它每60秒ping一次静态IP-它工作正常,但每天停止工作一次。我尝试使用“始终开启任务”,但在日志文件中收到“ping:套接字:不允许操作”。我有5美元帐户,我能做什么?从Bash控制台运行时我看到的内容:---17......
  • python+flask计算机毕业设计社区疫情防控物资调配平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,全球公共卫生事件的频发,尤其是新冠疫情的爆发,对社区治理与应急响应能力提出了前所未有的挑战。社区作为疫情防控的第一线,其物资调配......
  • python+flask计算机毕业设计四川工商学院疫情防控系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在全球新冠疫情持续蔓延的背景下,高校作为人员密集、流动性大的特殊场所,其疫情防控工作显得尤为重要。四川工商学院作为一所集教学、科研、......
  • python+flask计算机毕业设计企业人事管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂度的提升,传统的人事管理方式已难以满足现代企业对高效、精准、自动化管理的需求。企业人事管理涉及员工......