直接从 Python 在浏览器中启动 HTML 代码(由 BeautifulSoup 生成)

Posted

技术标签:

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

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

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

【问题讨论】:

更多选项在这里:Can beautiful soup output be sent to browser? 【参考方案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 模块,如下所示:

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

    打开命令行窗口并执行

    cd /my/web/directory
    python -m http.server 8000
    

    将浏览器指向http://127.0.0.1:8000

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

【讨论】:

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

以上是关于直接从 Python 在浏览器中启动 HTML 代码(由 BeautifulSoup 生成)的主要内容,如果未能解决你的问题,请参考以下文章

python selenium webdriver启动chrome浏览器的方法

python selenium webdriver启动chrome浏览器的方法

python中pydoc用法

python从web抓取信息

Proxy lab

python+appium基本启动配置