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.
>>> 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 ...]
- 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 metodyread
. 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.