【问题标题】:Launch HTML code in browser (that is generated by BeautifulSoup) straight from Python直接从 Python 在浏览器中启动 HTML 代码(由 BeautifulSoup 生成)
【发布时间】:2014-02-21 15:04:36
【问题描述】:

我使用 BeautifulSoup for Python 3.3 成功地从网页中提取所需信息。我还使用 BeautifulSoup 生成新的 HTML 代码来显示此信息。目前,我的 Python 程序打印出 HTML 代码,然后我必须将其复制、粘贴并保存为 HTML 文件,然后我可以在浏览器中对其进行测试。

所以我的问题是,有没有办法在 Python 中在网络浏览器中启动 BeautifulSoup 生成的 HTML 代码,这样我就不必通过我现在使用的复制和粘贴方法了?

【问题讨论】:

标签: python html python-3.x beautifulsoup


【解决方案1】:

使用webbrowser.open

import os
import webbrowser

html = '<html> ...  generated html string ...</html>'
path = os.path.abspath('temp.html')
url = 'file://' + path

with open(path, 'w') as f:
    f.write(html)
webbrowser.open(url)

替代使用NamedTemporaryFile(使文件最终被操作系统删除):

import tempfile
import webbrowser

html = '<html> ...  generated html string ...</html>'

with tempfile.NamedTemporaryFile('w', delete=False, suffix='.html') as f:
    url = 'file://' + f.name
    f.write(html)
webbrowser.open(url)

【讨论】:

  • 谢谢。这是我现在正在寻找的简单解决方案。
  • NamedTemporaryFile with delete = False 在这里可能更可取,因为它(可能)最终会被操作系统删除
  • @Jay,感谢您的评论。更新了答案以包含使用 NamedTemporaryFile 的替代方法。
  • 我需要使用with tempfile.NamedTemporaryFile('w', delete=False,suffix=".html") as f: 让它在浏览器中正确呈现html。否则我只是在浏览器中看到了原始的 html 字符串。
  • @marvin,谢谢你的评论。我相应地更新了答案。
【解决方案2】:

使用Flask 将您的代码转换为本地网络应用程序:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def scrape_and_reformat():
    # call your scraping code here
    return '<html><body> ... generated html string ... </body></html>'

if __name__ == '__main__':
    app.run()

运行脚本,将浏览器指向http://127.0.0.1:5000/

【讨论】:

  • 或者只是 SimpleHTTPServer?
  • @reptilicus,仅供参考,Python 3.x 中没有 SimpleHTTPServer,但 http.server
【解决方案3】:

(这已经足够长了,我想我应该把它分开作为一个单独的答案:)

正如@reptilicus 指出的那样,您可以使用内置的http.server 模块,如下所示:

  1. 创建一个 Web 文件目录并将您的 .html 文件保存在其中。

  2. 打开命令行窗口并执行

    cd /my/web/directory
    python -m http.server 8000
    
  3. 将浏览器指向http://127.0.0.1:8000

这仅适用于静态文件;它不会运行你的脚本并返回结果(就像 Flask 一样)。

【讨论】:

  • 谢谢。这是我第一次尝试在 Python 中使用 HTML 做任何事情,所以这个 http:server 现在有点过头了。如果我打算最终将我的代码放到网上,这会是一个有用的学习模块吗?
  • @user3108789:真的不难;从字面上看,它大约需要 15 秒。按照上面的步骤来试试吧!要在“实际托管”网站上工作,我会改用 Flask(如上所述);一旦你有一点经验,就试试 Django(但那是一个更大的环境,有更大的学习曲线。Flask 更容易上手)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2012-05-14
相关资源
最近更新 更多