Pull to refresh

Экспорт Избранного на Хабре в PDF. Версия 2.0

Reading time 3 min
Views 27K
Доброго времени суток, хабражители!



Думаю, многих из вас когда-либо посещала мысль «вот бы сохранить статьи с Хабра». Такая же мысль посетила и меня чуть больше года назад.

Представляю вам новую версию программы закачки статей с Хабра, Гиктаймс и Мегамозг в формате PDF.

Новый проект называется HabraParse.

Проект состоит из библиотечки, которая парсит сайты, и скрипта, использующего лишь часть возможностей этой библиотеки. Скрипт написан на python3, для его работы потребуются модули docopt, requests и weasyprint (все их легко можно установить командой pip install name).

На текущий момент в скрипте имеются следующие возможности:
  • скачать статью по её ID;
  • скачать список URL избранного для заданного пользователя;
  • скачать статьи из избранного в папку в формате PDF или HTML (пока реализация HTML не на высоте, поэтому по умолчанию используется формат PDF, но он работает значительно дольше).


Использование опций --gt/--mm позволяет сохранять статьи с GeekTimes.ru и Megamozg.ru.

Краткое описание параметров скрипта
Usage:
  ./habraparse.py save_favs_list [--gt|--mm] <username> <out_file>
  ./habraparse.py save_favs [--gt|--mm] [-cn --save-html --limit=N] <username> <out_dir>
  ./habraparse.py save_post [--gt|--mm] [-c --save-html] <topic_id> <out_file>

По умолчанию все команды работают с проектом HabraHabr.ru.
При задании опций --gt/--mm скрипт будет работать с GeekTimes.ru/Megamozg.ru.

Команды:
  save_favs_list - сохранение в файл <out_file> списка URL избранного для пользователя <username>
  save_favs - сохранение в папку <out_dir> статей из избранного для пользователя <username>
  save_post - сохранение в файл <out_file> статьи с заданным ID



Пользуйтесь и наслаждайтесь. В случае выявления ошибок прошу кидать сообщения в личку или заводить баг на github-страничке проекта.
Если кому-то чего-то не хватает, то пишите фич-реквест в комментах, по мере сил постараюсь реализовать.



Технические подробности


На самом деле Habraparse это, в первую очередь, библиотека для работы с информацией на сайтах Habrahabr.ru, GeekTimes.ru, MegaMozg.ru, позволяющая:
  • получить информацию о профиле пользователя по его имени;
  • получить из профиля пользователя: статьи, которые он написал и которые он добавил в свое «Избранное»;
  • получить статью по номеру ID с её разбором.

Название для библиотеки было выбрано крайне оригинальное — habr.

Информация о пользователе представлена в классах HabraUser, GeektimesUser, MegamozgUser модуля habr.user и включает в себя:
  • полное имя и никнейм;
  • дата регистрации;
  • дата рождения;
  • данные по карме (сама карма, количество голосов);
  • рейтинг и место в рейтинге;
  • страна, регион, город;
  • количество фолловеров;
  • количество постов;
  • количество комментов;
  • подписки на хабы, компании.


Информация о статьях представлена в классах HabraTopic, MegamozgTopic, GeektimesTopic модуля habr.topic и включает в себя:
  • id статьи;
  • заголовок;
  • имя автора;
  • рейтинг;
  • текст статьи (текст статьи не преобразован, все ссылки на картинки и прочее не тронуты);
  • комментарии: их количество и list с текстом комментариев;
  • перечень хабов, в которых находится статья.


Скрипт же использует библиотеку habr для парсинга и библиотеку weasyprint для генерации pdf. Weasyprint был выбран как самый простой по интерфейсу работы, и как единственный из попробованных, который смог сгенерировать нормальный PDF-файл. Однако, как оказалось, данная библиотека работает весьма медленно.
Если вы знаете другие библиотеки генерации pdf, которые работают лучше — пишите в комменты или в личку. Однако сразу скажу, что разработка изначально велась под python3, поэтому не надо мне рассказывать про прекрасные pdf-библиотеки для python2.

На сим всё. Если кому понравилось, то пользуйтесь на здоровье! Если кто готов на базе этой библиотеки сделать свой скрипт с картами и женщинами, то всё в ваших руках!

UPD. По просьбам трудящихся обновил образ контейнера для докера icoz/habraparse. Порядок использования читайте здесь.
Only registered users can participate in poll. Log in, please.
Надо ли делать графическую оболочку для Habraparse?
42.11% Да, обязательно! Я не могу разобраться, как пользоваться консольным скриптом. 347
41.87% Было бы неплохо, но я и с консолью вполне себе справляюсь 345
15.41% Нет, не надо! Консоль — наше всё. 127
0.61% Нет, не надо. Я сам напишу и опубликую её на Хабре во имя всеобщего блага! 5
824 users voted. 135 users abstained.
Tags:
Hubs:
+44
Comments 53
Comments Comments 53

Articles