直接从 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浏览器的方法