Задать вопрос

Как оптимизировать API для парсера на Python?

Друзья, привет! В качестве повышения квалификации пишу небольшой многопоточный парсер, а также API к нему для доступа через веб. Ресурс, с которого я буду парсить, предоставляет свой API, который ну очень ограничен в целях безопасности. А я хочу парсить все и отдавать данные в xml/json. В качестве инструментов буду использовать request + lxml + postgresql + nginx + uwsgi + стандартный модуль threading для многопоточного запроса и парсинга страниц. Вопрос состоит в том, как кешировать данные в базу, чтобы при аналогичном запросе данные забирались из кеша. Мне нужно забрать из ответа сервера заголовки Last-Modified и сравнивать их с каждым новым запросом, чтобы осуществлять кэширование без ошибок?
Спасибо.
  • Вопрос задан
  • 732 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
пересмотрите свои взгляды на жизнь. зачем наступать на грабли, на которые уже кто-то наступал. посмотрите на готовые решения. к примеру Scrapy. Шикарная библиотека для парсинга со своим сервером
Ответ написан
Комментировать
@sowrong
В качестве инструментов буду использовать ... стандартный модуль threading для многопоточного запроса и парсинга страниц.

Глупо. Всмысле неэффективно. Многопоточность в питоне очень скользкая тема.
Парсинг веб-ресурсов в основном затыкается на ожидании ответа ресурса, с которого грузятся странички. И это время ожидания сравнимо, а иногда и вовсе превышает время разбора страницы.
Попробуйте лучше асинхронный подход. Asyncio для python >=3.3, gevent для 2.x (можно другие варианты по своему вкусу)

А что касается самого вопроса, то слишком мало информации для нормального ответа. Если на заголовки можно положиться для этого конкретного ресурса, то почему бы и нет? А если нельзя? Мы по ту сторону монитора не видим, что там есть еще. Что там за данные? Как часто они меняются? Возможно удастся понять по каким критериям можно кешировать, изучая сами данные (а не ответы сервера). Возможно ответ есть в документации API ресурса. Или вообще придется определять это на глаз, смотреть попали-непопали и подгонять условия...
Вобщем смотрите, изучайте, и принимайте решения :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы