【问题标题】:Alternative to a server side scripting language for scraping用于抓取的服务器端脚本语言的替代方案
【发布时间】:2012-04-02 23:38:30
【问题描述】:

我有一个由我的大学托管的小型网站。该政策是不启用服务器端脚本语言(例如 PHP 等),因此网站要么是静态的,要么可以使用客户端脚本(例如 javascript 等)。我也无法触摸服务器/配置它/安装东西。

无论如何,我想从其他网站(即谷歌学者引文)中添加一些我设法用 Python+lxml 动态抓取的数据。 有什么方法可以动态查询这些数据 - 当然是在客户端?

我尝试使用 IronPython 将我的 Python 代码嵌入到我的网页中,但它抱怨找不到 lxml 导入的库。但是类似的解决方案会很棒。 或者是一个纯 javascript 库,允许打开和解析外部网页...?

谢谢!

【问题讨论】:

    标签: javascript python ironpython client-side


    【解决方案1】:

    没有。 same origin policy 阻止它。

    要么使用将数据转码为 JSON-P 的第三方代理,要么使用不同的主机。

    或者,在您控制的服务器上运行一个 cron 作业,定期生成新的静态 HTML 并上传到您的主机。

    【讨论】:

    • 没有办法规避这个政策吗?例如,在另一个更灵活的服务器上使用 php 脚本并使用 iframe 仅显示相关数据?但是,如果我这样做,并且如果我有 20 个数据要检索并在 20 个不同的小 iframe 中显示,我将需要查询 php 脚本 20 次:s 谢谢(全部!)您的回复
    • 谢谢,那行得通 :) people.seas.harvard.edu/~nbonneel/publications.html 使用由 www.bonneel.com/cites.php5 生成的 jsonp?author=bonneel 随意使用代码和 jsonp :)
    【解决方案2】:

    鉴于服务器的限制,我会在本地运行这些脚本以生成 HTML,并将静态输出推送到您的服务器上。

    【讨论】:

      【解决方案3】:

      诀窍是您将与Same Origin Policy 发生冲突,这在很大程度上会阻止您的客户端代码访问与您的页面不同来源的网站的内容。像CORS 这样的东西允许跨域的东西,但是用户必须使用支持它的浏览器,并且您尝试从中加载数据的站点必须支持它(并且要么专门允许您的页面访问,或允许所有页访问)在服务器级别。

      因此,您可能需要一个服务器端解决方案 - 但这并不一定意味着 您的 服务器必须提供它。如果您从支持JSON-P 收集信息的站点,那么您可以使用它而不会出现 SOP 问题。如果没有,您也许可以使用YQL 之类的服务,如本文using YQL as a cross-domain proxy 中所述。

      如果这些都不适合你(而且你不能像Quentin cleverly suggested 那样做cron 的工作),我只想指出PHP 网络托管是一种丰富的商品,因此非常便宜。就像,低于每月一杯咖啡的价格便宜。我以低于 2 美元/月的价格看到它(我现在在 20 秒的搜索中找到的最便宜的是 2.49 美元,但我知道我看到的更好)。因此,您可以重新定位该站点,或者,如果将其放在大学地址上很重要,则为自己提供来自咖啡杯式服务器的 JSON-P 接口,然后由您的大学站点的客户端代码使用。

      【讨论】:

        猜你喜欢
        • 2014-04-15
        • 2015-09-23
        • 2022-08-12
        • 2019-05-18
        • 2020-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多