有没有办法从同时在同一服务器上运行的jupyter笔记本导航Web服务器?

时间:2019-07-09 21:54:12

标签: python jupyter-notebook jupyter

考虑一个安装在端口8888上的远程服务器上的jupyter笔记本。假设此远程服务器在端口80上也有一个Web服务器。还要考虑端口8888是公开的,但端口80不公开,只能访问从本地主机(正在运行jupyter笔记本的本地主机)。是否可以从在本地Web浏览器中打开的Jupyter笔记本中导航此本地Web服务器?

我试图找到一些关于stackoverflow的解决方案,但找不到适合我情况的解决方案。

我发现了很多类似IPython.display中使用IFrame的东西,也类似于使用urlopen中的东西,但是它并没有像我预期的那样工作,我无法像我们在Web服务器中那样在Web服务器中导航标准的网络浏览器。 我想我需要端口转发,代理或在python笔记本中运行的以python实现的隧道之类的东西。

from six.moves.urllib.request import urlopen
url='http://localhost:80'
response = urlopen(url)
content = str(response.read())

from IPython.core.display import display, HTML
display(HTML(content))

它会在jupyter笔记本中打印HTML,但我们无法像预期的那样导航:

from IPython.display import IFrame

url = 'https://www.wikipedia.org'
IFrame(url, width=800, height=400)

一些建议?

1 个答案:

答案 0 :(得分:0)

您可以在笔记本中显示任意HTML。

作为对您的评论的回应,您可以通过标准的GET请求页面,并通过IPython HTML标签进行显示吗?

由于请求将在本地执行 ,因此笔记本可以获取内容。根据页面的复杂程度(例如静态资产路径),它将呈现html:

import requests
content = requests.get('https://localhost:80/').text
from IPython.display import HTML, display
display(HTML(content))

作为替代方案,可以使用简单的代理服务器,例如https://ngrok.com/


在代码中创建标准的HTML超链接:

from IPython.display import HTML, display
display(HTML("<a target='_blank' href='https://google.com'>google</a>"))

或者,markdown块允许标准HTML标签添加相同的<a>超链接。