我正试图从网站上不断变化的信息中读取。
例如,假设我想读取在线广播网站上正在播放的艺术家的名字。我可以获取当前歌手的名字但是当歌曲改变时,HTML会自动更新我已经通过
打开了文件f = urllib.urlopen("SITE")
所以我看不到新歌的歌手名字
我可以保持关闭和打开URL在一段时间内(1)循环获得更新的HTML代码,或者有更好的方法来做到这一点?谢谢!
你必须定期重新下载网站。不要经常这样做,因为这会对服务器造成太大的负担。
这是因为HTTP本质上不是一个流协议。一旦您连接到服务器,它期望您向它抛出一个HTTP请求,然后它将向您抛出一个包含该页面的HTTP响应。如果您的初始请求是keep-alive (HTTP/1.1的默认值),您可以再次抛出相同的请求并使页面保持最新。
我推荐什么?根据你的需要,每n秒访问一次页面,获取你需要的数据。如果站点提供了API,您可以利用它。此外,如果是您自己的站点,您可能能够通过HTTP实现comet样式的Ajax并获得真正的流。
还要注意,如果这是别人的页面,这是可能的网站使用Ajax通过Javascript使其最新;这意味着有其他请求导致更新,你可能需要分析网站,找出你需要发出哪些请求来获取数据。
如果您使用urllib2,您可以在发出请求时读取头文件。如果服务器在报头中返回"304 Not Modified",则表示内容没有更改。
是的,这是正确的方法。要获得web上的更改,您必须每次发送新的查询。动态AJAX站点在内部做完全相同的事情。
一些站点提供了额外的API,包括长轮询。在网站上查找文档或询问他们的开发人员是否有。