【问题标题】:Parsing lines from a live streaming website in Python用 Python 解析来自实时流媒体网站的行
【发布时间】:2011-04-30 21:56:34
【问题描述】:

我正在尝试从网站中读取不断变化的信息。

例如,假设我想读取在线广播网站上正在播放的艺术家姓名。 我可以获取当前艺术家的姓名,但是当歌曲更改时,HTML 会自行更新,并且我已经通过以下方式打开了文件:

f = urllib.urlopen("SITE")

所以我看不到新歌的更新艺术家姓名。

我可以在 while(1) 循环中继续关闭和打开 URL 以获取更新的 HTML 代码,还是有更好的方法来做到这一点?谢谢!

【问题讨论】:

  • 有趣的问题——f句柄有seek函数吗?

标签: python stream live urllib


【解决方案1】:

您必须定期重新下载该网站。不要经常这样做,因为这对服务器来说太难了。

这是因为 HTTP 本质上不是流协议。一旦你连接到服务器,它希望你向它抛出一个 HTTP 请求,然后它会向你抛出一个包含页面的 HTTP 响应。如果您的初始请求保持活动状态(默认为 HTTP/1.1),您可以再次抛出相同的请求并更新页面。

我会推荐什么?根据你的需要,每n秒获取一次页面,获取你需要的数据。如果该站点提供 API,您可以利用它。此外,如果它是您自己的网站,您也许可以通过 HTTP 实现彗星式 Ajax 并获得真正的流。

另外请注意,如果它是其他人的页面,则该网站可能会通过 Javascript 使用 Ajax 来使其保持最新状态;这意味着还有其他请求导致了更新,您可能需要剖析网站以确定您需要提出哪些请求才能获取数据。

【讨论】:

    【解决方案2】:

    如果您使用 urllib2,您可以在发出请求时读取标头。如果服务器在标头中发回“304 Not Modified”,则内容没有更改。

    【讨论】:

      【解决方案3】:

      是的,这是正确的方法。要在 Web 中进行更改,您必须每次都发送新的查询。 Live AJAX 网站的内部功能完全相同。

      一些网站提供额外的 API,包括长轮询。在网站上查找文档或询问他们的开发人员是否有。

      【讨论】:

        猜你喜欢
        • 2015-05-27
        • 2016-07-07
        • 2019-01-22
        • 1970-01-01
        • 2012-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多