Експорт Обраного на Хабре в PDF версія 2.0

Доброго часу доби, хабражітелі!


Думаю багато з вас коли-небудь відвідувала думка «от би зберегти статті з Хабра».
Така ж думка відвідала і мене трохи більше року назад.
Представляю вам нову версію програми закачування статей з Хабра, Гиктаймс і Мегамозок у форматі PDF.

Новий проект називається HabraParse.
Проект складається з бібліотечки, яка парсити сайти, і скрипта, що використовує лише частину можливостей цієї бібліотеки. Скрипт написаний на python3, для його роботи потрібні модулі docopt, requests і weasyprint (усі їх легко можна встановити командою pip install name.
На поточний момент в скрипті є наступні можливості:
  • завантажити статтю за її ID;
  • завантажити список URL обраного для заданого користувача;
  • скачати статті з обраного в теку у форматі PDF або HTML (поки реалізація HTML не на висоті, тому за замовчуванням використовується формат PDF, але він працює значно довше).


Використання опцій --gt/--mm дозволяє зберігати статті з GeekTimes.uk і Megamozg.uk.

Короткий опис параметрів скрипта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.

На сім всі. Якщо комусь сподобалось, то користуйтеся на здоров'я! Якщо хтось готовий на базі цієї бібліотеки зробити свій скрипт з картами і жінками, то все у ваших руках!
Треба робити графічну оболонку для Habraparse?

/>
/>


<input type=«radio» id=«vv64997»
class=«radio js-field-data»
name=«variant[]»
value=«64997» />
Так, обов'язково! Я не можу розібратися, як користуватися консольним скриптом.
<input type=«radio» id=«vv64999»
class=«radio js-field-data»
name=«variant[]»
value=«64999» />
Було б непогано, але я і з консоллю цілком собі справляюся
<input type=«radio» id=«vv65001»
class=«radio js-field-data»
name=«variant[]»
value=«65001» />
Ні, не треба! Консоль — наше все.
<input type=«radio» id=«vv65003»
class=«radio js-field-data»
name=«variant[]»
value=«65003» />
Ні, не треба. Я сам напишу і опублікую її на Хабре в ім'я загального блага!

Проголосувало 10 осіб. Утрималося 8 чоловік.


Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.