Zanurkuj w Pythonie/Jak nie pobierać danych poprzez HTTP

Jak nie pobierać danych poprzez HTTP

edytuj

Załóżmy, że chcemy pobrać jakiś zasób poprzez HTTP, jak np. RSS (Really Simple Syndication). Jednak nie chcemy pobrać go tylko jednorazowo, lecz cyklicznie, np. co godzinę, aby mieć najświeższe informacje ze strony, która udostępnia RSS. Zróbmy to najpierw w bardzo prosty i szybki sposób, a potem zobaczymy jak można to zrobić lepiej.

Przykład. Pobranie RSS w szybki i prosty sposób
>>> 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/"/>
 
  [... ciach ...]

  1. Pobranie czegokolwiek poprzez HTTP jest w Pythonie niesamowicie łatwe; właściwie jest to jedna linijka kodu. Moduł urllib ma bardzo poręczną funkcję urlopen, która przyjmuje na wejściu adres strony, a zwraca obiekt plikopodobny, z którego można odczytać całą zawartość strony przy pomocy metody read. Prościej już nie może być.

A więc co jest z tym nie tak? Cóż, do szybkiej próby podczas testowania, czy programowania, to w zupełności wystarczy. Chcieliśmy zawartość RSS-a i mamy ją. Ta sama technika działa dla każdej strony internetowej. Jednak gdy zaczniemy myśleć w kategoriach serwisów internetowych, z których chcemy korzystać regularnie -- pamiętajmy, że chcieliśmy pobierać tego RSS-a co godzinę -- wtedy takie działanie staje się niewydajne i prymitywne.

Porozmawiajmy o podstawowych cechach HTTP.