【问题标题】:Is it possible access other webpages from within another page是否可以从另一个页面中访问其他网页
【发布时间】:2009-10-27 03:07:34
【问题描述】:

基本上,我要做的只是制作一个小脚本,该脚本可以访问论坛中的最新帖子并从中提取一些文本或图像。我使用 htmllib 模块和一些正则表达式在 python 中工作。但是,脚本仍然不是很方便,如果我能以某种方式将它放入 HTML 文档中会更好。看来简单地嵌入 Python 脚本是不可能的,所以我想看看是否有类似的功能,如 python 的 htmllib,可用于访问其他网页并从中提取一些信息。

(基本上,如果我可以让这个脚本以 html 文档的形式运行,我可以只打开一个 html 文档,而不是导航到几个不同的页面来获取我想要检查的信息)

我很确定 javascript 没有我需要的功能,但我想知道其他语言,例如 jQuery,甚至像 AJAX 之类的语言?

【问题讨论】:

  • 澄清一下:jQuery 不是一种“语言”,它是一个 JavaScript 代码库,旨在简化现代跨浏览器 Web 开发。 Ajax 不是一种语言,它是一个旨在包含某种 Web 应用程序编程的术语(现在使用比其原始定义更广泛)。 Ajax 技术通常用于 JavaScript 代码,而 jQuery 是有助于简化 Ajax-y 开发的众多库之一。

标签: javascript jquery python


【解决方案1】:

正如 Greg 所提到的,当尝试从远程服务器加载时,Ajax 解决方案将无法“开箱即用”。

但是,如果您尝试从 同一 服务器加载,它应该是相当简单的。我提出这个答案是为了展示如何在几行代码中使用 jQuery 来完成。

<div id="placeholder">Please wait, loading...</div>

<script type="text/javascript" src="/path/to/jquery.js">
</script>
<script type="text/javascript>
$(document).ready(function() {
    $('#placeholder').load('/path/to/my/locally-served/page.html');
});
</script>

如果您尝试从与您所在的服务器不同的服务器加载资源,绕过安全限制的一种方法是提供代理脚本,该脚本可以获取服务器上的远程内容,并制作它好像是来自您自己的域。

这里是关于 jQuery 的 load 方法的文档:http://docs.jquery.com/Ajax/load

还有一个不错的功能需要注意,那就是部分页面加载。例如,假设您的远程页面是一个完整的 HTML 文档,但您只想要该页面中单个 div 的内容。您可以将选择器传递给load 方法,如我上面的示例所示,这将进一步简化您的任务。例如,

$('#placeholder').load('/path/to/my/locally-served/page.html #someTargetDiv');

祝你好运!
-迈克

【讨论】:

    【解决方案2】:

    一般有两种方法:

    • 修改您的 Python 代码,使其作为 CGI(或 WSGI 或其他)模块运行,并通过运行一些服务器端代码生成感兴趣的页面。
    • 通过运行一些客户端代码,使用带有jQuery的Javascript来加载感兴趣的内容。

    这两种方法之间的区别在于第三方服务器看到的请求来自哪里。在第一种情况下,它来自您的 Web 服务器。在第二种情况下,它来自访问您页面的用户的浏览器。

    某些浏览器可能无法非常优雅地处理从第三方服务器加载内容(也就是说,它们可能会弹出警告框或其他内容)。

    【讨论】:

      【解决方案3】:

      您可以嵌入 Python。最直接的方法是使用cgi 模块。如果脚本会经常运行并且您使用的是 Apache,那么使用mod_pythonmod_wsgi 会更有效。您甚至可以使用像 Django 这样的 Python 框架并用 Python 编写整个网站。

      也可以用 Javascript 编写代码,但这会更棘手。跨站点请求存在很多安全问题(啊,不安全的互联网),因此当您尝试通过浏览器执行此操作时,它往往是一个棘手的域。

      【讨论】:

        猜你喜欢
        • 2017-12-01
        • 2018-12-16
        • 1970-01-01
        • 2014-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多