воскресенье, 26 июня 2011 г.

Получение данных по URL

В настоящее время работа с данными из Сети уже не просто удобная возможность, сейчас это то, что должно работать по умолчанию. В Сети находится огромное количество информации: анонсы фильмов, каталоги товаров, прогноз погоды и многое другое. Лишать себя этих благ было бы как-то не разумно. С учетом того, что большая часть информации находится на веб серверах, рассмотрим возможно загрузки данных из Сети по URL

В репозитории pyflowctrl для этого есть специальный процесс UrlFetchGet, который с помощью HTTP GET запроса загружает данные.

Пример простого скрипта example9.py, который на основании списка URL, полученного из текстового файла, загружает контент с веб сервера и выводит его на экран консоли.
from core2 import Stream, Process, ProcessFlow
from processes.urlfetch1 import UrlFetchGet
from processes.stdoutprinter1 import Printer
from processes.textfilereader1 import TextFileReader

if __name__ == '__main__':

    pflow1 = ProcessFlow()
    reader1 = pflow1.new(TextFileReader(path='data/urls'))
    urlfetch1 = pflow1.new(UrlFetchGet())
    printer1 = pflow1.new(Printer())

    pflow1.link({'sid': reader1, 'son': 'output', 'tid': urlfetch1, 'tin': 'input'})
    pflow1.link({'sid': urlfetch1, 'son': 'output', 'tid': printer1, 'tin': 'input'})
    pflow1.run()

Про процессы TextFileReader и Printer подробнее можно прочесть в “Работа с текстовыми файлами

Схематически код приведенный выше можно представить в виде диаграммы


На вход процесса UrlFetchGet поступают URL ресурсов c которых необходимо получить данные. На выходе, для каждого запроса получаем список из:
  • URL, не обязательно соответствующий входному URL (для случая redirection)
  • STATUS_CODE, результат выполнения, соответствующий одному из HTTP кодов, если значение положительное. И если значение отрицательное, проблема указывается в поле error-msg для INFO. Например, для случая ‘Couldn't resolve host’
  • CONTENT, контент соответствующий входному URL
  • INFO, дополнительная информация возвращенная сервером: Content-type, Cookie, Last-Modified, Server и т.д.

0 комментариев:

Отправить комментарий