返回介绍

11.2. 避免通过 HTTP 重复地获取数据

发布于 2019-09-14 13:30:41 字数 1450 浏览 1095 评论 0 收藏 0

11.2. 避免通过 HTTP 重复地获取数据

假如说你想用 HTTP 下载资源, 例如一个 Atom feed 汇聚。你不仅仅想下载一次; 而是想一次又一次地下载它, 如每小时一次, 从提供 news feed 的站点获得最新的消息。让我们首先用一种直接而原始的方法来实现它, 然后看看如何改进它。

例 11.2. 用直接而原始的方法下载 feed

>>> import urllib
>>> data = urllib.urlopen('http://diveintomark.org/xml/atom.xml').read()    1
>>> print data
<?xml version="1.0" encoding="iso-8859-1"?>
<feed version="0.3"
  xmlns="http://purl.org/atom/ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="en">
  <title mode="escaped">dive into mark</title>
  <link rel="alternate" type="text/html" href="http://diveintomark.org/"/>
  <-- rest of feed omitted for brevity -->
1使用Python 通过 HTTP 下载任何东西都简单得令人难以置信; 实际上, 只需要一行代码。 urllib 模块有一个便利的 urlopen 函数,它接受您所要获取的页面地址, 然后返回一个类似文件的对象,您仅仅使用 read() 便可获得页面的全部内容。 这再简单不过了。

那么这种方法有何不妥之处吗? 当然, 在测试或开发中一次性的使用没有什么不妥。我经常这样。我想要 feed 汇聚的内容, 我就获取 feed 的内容。 这种方法对其他 web 页面同样有效。 但是一旦你开始按照 web 服务的方式去思考有规则的访问需求时(记住, 你说你计划每小时一次地重复获取这样的 feed )就会发现这样的做法效率实在是太低了, 并且对服务器来说也太笨了。

下面先谈论一些 HTTP 的基本特性。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文