Pull to refresh

Comments 93

Я как раз уже несколько дней пытаюсь придумать, как бы реализовать удобный экспорт самых толковых howto на читалку, и тут такое. Спасибо, сейчас протестирую!
Хм. Думаю, без особых проблем можно сделать выгрузку в html. А html уже легко конвертится во что угодно…
Тем более, что скрипт изначально html и генерирует :)
Прошу прощения за бестолковый вопрос, но работает ли эта штука под Windows?
Если все нужные библиотечки будут стоять, то должно работать.
Единственное, что меня смущает, так это symlink'и в Windows. Так что с параметром --no-symlinks должно работать.
Еще в Висте появилась поддержка симлинков. Так что на современных версиях ОС даже без этого параметра должно заработать.
Занятно. Ссылку бы тоже сразу лучше вставили. :)
Работает.

Качаем скрипт, ставим необходимые библиотеки. Для версии python 2.7 помимо тех, которые указаны в статье, потребовалось поставить еще библиотеки six, lxml.

А чем вам argparse не нравится?
Я же не сам аргументы разбираю, а argparse использую. В чем преимущество docopt?
Почитал доку. Неее… Там надо самому весь usage расписать, а docopt на базе этого сам разберет параметры.
Я программист — много писать мне лень. Я лучше 10 строк для argparse напишу… Плюс к тому, проще задать ограничения на вводимые значения.
Блин, то ли я плохо объясняю, то ли вы не ту доку читаете…
Usage всегда будет короче, чем код argpasre, который его стоит.
Вот в этом месте видео автор либы сравнивает код консольного чекера pep8 с argparse и с docopt:
www.youtube.com/watch?v=pXhcPJK5cMc#t=418

Если и после этого не убедил, то видимо у нас разные вкусы.
Посмотрел пунктиром.
Да, библиотечка стоящая. Но каждой библиотеке свои задачи.
В примере разбирали очень крутую конфигурацию опций. Да, в этом случае docopt полезнее.

Но не забывайте, что для изучения чего-то нового необходимо время.
Когда случай сложный, то быстрее будет изучить docopt и использовать его, а иначе зачем заморачиваться?

А вот в чем вы меня действительно не убедили, так это в том, зачем переделывать утилиту на использование новой библиотеки?

PS. видюшка интересная, закинул ее себе в посмотреть попозже.
Ну я же вас не принуждаю код писать =)
Это скорее было в академических целях, если вам интересно.
Я однажды делал экспорт избранного в FB2. Правда, потом на сайте что-то сделали с разметкой, и он перестал работать. Но желающие могут форкнуть и допилить.
Гляну. Может чего и оттуда полезного перетяну. :)
Работает, спасибо!
Правда несколько модулей пришлось поставить.
Не понял, что я такого сказал? Если про модули, то кроме тех, что упомянуты.
Мне пришлось кроме указанных установить лишь lxml. Кстати, надо бы в readme добавить список зависимостей.
2.7?
lxml точно ставил, и ещё что-то… забыл уже :)
Разумеется, когда дома :)
Глянул — у меня вроде всё. То есть lxml + то, что у вас в статье уже перечислено.
Список неточен только из-за того, что у каждого на системе уже что-то может стоять.
Да и если составлять такой список, то надо отследить все зависимости всех используемых библиотек.
Скучно и бессмысленно.
Ну и с другой стороны, никто не говорил, что у утилиты отсутствует порог вхождения.
Ну и с другой стороны, никто не говорил, что у утилиты отсутствует порог вхождения.

Разумеется, он же на каждый чих пишет, что ему не нравится.
Как минимум, я бы добавил lxml, ибо уже минимум у двоих это потребовалось. ;)
UFO landed and left these words here
Скорее всего chrome будет сохранять статью так, как вы ее видите на экране, с менюшками и прочей рекламой.
Скрипт же выдирает исключительно смысловую нагрузку.
UFO landed and left these words here
Именно так и реализовано в скрипте.
Несколько замечаний:
1. У меня в избранном 17 страниц, скрипт пытается обработать 25.
2. Не все посты корректно сохраняются. У меня это 136056, 147996,163097,165527,172009,187210,206604. Создается pdf с нулевым размером
По первому пункту:
На каждой странице по 10 постов, у вас 246 постов, логично, что скрипт пытается дернуть 25 страниц.
Внимание, вопрос: а как так 17 страниц получается?

По второму:
Запустите еще раз. Бывает что какие-то таймауты выходят и скрипт не получает данных.
Вот если проблема повторяется раз за разом именно на этих постах, то тогда есть повод подумать…
Проверил, по второму пункту у меня те же посты нулевыми получились.
Буду думать что не так…
На счет постов, видно у хабра с этим проблема, вы можете сами посмотреть у меня всего 17 страниц в избранном. Скрипт сохраняет 170 файлов.
По поводу нулевых файлов, я запускал несколько раз. Ошибки там разные, вам лучше самому посмотреть, я python-е ничего не понимаю.
Про нулевые файлы могу сказать пока только одно:
в виде HTML они загружаются корректно.
Может быть какой-нибудь косяк внутри библиотеки рендеринга pdf? Она ведь сама, например, картинки вытаскивает.
НАсколько сложно будет сделать .mobi => kindle?
Можно ли как-то переделать скрипт для Python 3.3? Может кто подскажет?
Думал над этим.
Даже попробовал. Но у меня всё валится на необходимости порта на python3 пакета reportlab.
Нашел на stackoverflow, говорят есть порт.
Но это экспериментальное всё и не мейнстрим, то есть ее нет даже в PyPI, только для python2.

К чему это я…
Ах да! Даже если с такими костылями и сделать порт, то поставить его смогут немногие.
Либо переписывать скрипт с использованием других библиотек.
А можно сделать опцию на выгрузку одной конкретной статьи? Или списка статей из файла, а не из избранного?
Ну вот как раз одну статью удобнее экспортировать средствами браузера, как выше сказали.
Да, согласен. Тогда вопрос снимается )
Да, можно.
Можно добавить новый параметр --get-one.
Можно и из списка…
Актуально ещё?
Думаю, список актуален — можно, например, взять какую-нибудь сборную статью с выборкой лучшего по теме, скопировать оттуда все ссылки и сохранить в файл, а из него уже загрузить все статьи для чтения.
Не так давно тоже писал свой велосипед, но для Kindle. Скрипт умеет:
1. Вытягивать лучшие статейки по хабам. (используя бд из моего предыдущего поста)
2. Парсить избранное
3. Просто стянуть рандомную статью.

Для корректной работы, нужно скачать kindlen и указать у нему путь в habr_to_kindle.py.

В итоге

комментарии

Почитал. Хороший код. Понятный.
Прям приятно почитать перед сном… :)
Спасибо за скрипт!

Все предыдущие варианты что я пробовал быстро загибались под натиском моего избранного, а Ваш уже 9/99 страниц обработал. Пока держится молодцом! =)
После 10 минут тупняка опять пошло — уже 42 страницу парсит.
О_о
Вы меня поражаете.
Надеюсь хоть по разным файлам?
И тогда уж в формате html…
Из параметров я указал только свой ник — так что по разным файлам и в pdf =)

html на айпаде не очень удобно читать, так что закину pdf-ки в iBooks. Жаль только, что метаданные не заполняются у pdf:


Реквестирую вставку в метаданные ника автора, заголовка статьи и тегов (в поле «Тема»).
Идея хорошая. Возьму на заметку. Подумаю.
Возможно есть решение проще.
Фух, распарсил 900+ статей. Всё таки справился, спасибо автору! Первый парсер, который сделал свою работу.
И всего лишь один нулевой файл на выходе.
И не удивительно, что все предыдущие парсеры не справлялись — памяти им не хватало. =)
Добавил эту статью в избранное, и забыл про неё. Всё правильно сделал?
Да, если вы не забыли сохранить скрипт.
Сделал версию(анлог) на QML/C++ с GUI, думаю кому-нибудь понадобится. Пока умеет только: сам экспорт в отдельные файлы, экспорт из отдельных тегов и убирать ссылка из поста. Скоро добавлю остальной функционал, так что не судите строго. На Github
Честно говоря, для GUI я бы добавил побольше.
Да и вообще сделал бы в виде Мастера.
Шаг 1. ввести ник, нажать далее.
Шаг 2. собрать инфу с его избранного и вывести в древовидной(хабы и посты) форме или списком все статьи. Ввести фильтры: по времени, по хабу, по автору.
Шаг 3. поотмечать галочками что сохранить, а что нет. Нужны комментарии или нет.
Шаг 4. вытянуть и сохранить. Формат на выбор: html, pdf, может конвертация в какой-нибудь fb2.

Может и сам когда-нибудь этим займусь, когда время будет. Или вы попробуйте, если время есть.
Спасибо! А вы не могли-бы скомпилировать и под Windows для тех, кому это сделать трудновато по причине незнания, даже в теории, как это делать? :) Буду крайне благодарен!
Дык такое я и не начинал еще. Идей проектов много, а времени крайне мало. :(
Упс, кажется промахнулся в ответе, мой комментарий был адресован уважаемому RAZVOR, т.к. по его ссылке на Github есть такие строки: «Now only for OSX. You can compile it for Linux or Windows from source.». Прошу прощения что ввел в заблуждение )
./fav2pdf.py --from-date "3 января 2014" user
С reportlab версии 3.0 не работает, выдает ошибку. Пришлось специально ставить 2.7
Насколько я понял после обновления дизайна — не работает?
У меня скрипт теперь проходит по всем статьям и говорит что они — «is locked».
Аналогично :( Большая просьба к автору, поправьте, если есть такая возможность.
Я смотрел, не так все просто.
У меня сейчас в разработке новый парсер страниц. Своеобразный фреймворк для парсинга хабра. Пока сырой и не все еще реализовано. Поэтому пока класть в опенсурс стыдно.
Если есть желающие попилить — прошу в личку.
Отмечу, что я в описанной программе взял чужой парсер и сделал к нему консольную обертку.
А сейчас пишу свой парсер.
В таком случае, будем ждать с нетерпением :)
Парсер написан. Баги есть, но по ходу дела вылавливаются.
Но я столкнулся с другой проблемой — чем сохранять в третьем питоне в pdf?
Гугл сходу не помог… :(
Могу просто html сохранять — пойдет?
Это просто отличные новости! Жаль, у меня не хватает кармы для голосования :(

Меня бы устроило и в HTML. Но вот что выдал мне гугл, stackoverflow.com/questions/12021216/is-there-any-python-3-module-to-create-pdf-files вдруг вам это поможет, хотя я слегка далек от программирования вообще, и от Питона в частности (
Это я находил и читал. Некоторые решения там не кроссплатформенные. Некоторые уже померли…
Посмотрим внимательнее, конечно.
html можно сохранить в pdf используя pyQt:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("http://habrahabr.ru/post/208802"))
#web.show() можно показать страницу
printer = QPrinter()
printer.setPageSize(QPrinter.A4)
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setOutputFileName("file.pdf")
def convertIt():
    web.print_(printer)
    print("Pdf generated")
    QApplication.exit()
QObject.connect(web, SIGNAL("loadFinished(bool)"), convertIt)
sys.exit(app.exec_())


Отсюда. Не знаю, поможет вам или нет.
О! А это мысль! Что-то я про кутю забыл совсем…
Спасибо. Может и графический интерфейс нарисую тогда уж.
Нашел такую штуку!
Думаю, будем пользовать её. Простая и работает с python3.
Будет время — напишу небольшую статейку про неё.
UFO landed and left these words here
Да. Я взял чужой парсер и сделал к нему обертку. Ну и доработал маленько кое-где.

Сейчас я написал всё свое с нуля и на третьем питоне. Осталось немного.
Есть какие-нибудь новости по новому парсеру?
Почти.
Парсер есть и работает. Но есть проблема. Не могу толком сохранить в pdf, а для сохранения в html требуется перерабатывать всё содержимое страницы.
Могу выложить сам парсер, кто сможет доработать или хотя бы подсказать что делать — буду рад.
Приветствую всех.
Я опубликовал исходники парсера для Хабра.
github.com/icoz/habrapasre
Парсер работает вполне сносно.
Проблемы:
1) сохранение в pdf (то формат страницы такой, что часть текста обрезана, то картинок нет)
2) сохранение в html требует глубокого анализа текста, чтобы подменять ссылки на картинки, например…

Буду рад любой помощи.
Проведен ряд доработок. Скрипт работоспособен. Ограничена функциональность в части работы с комментариями.
Sign up to leave a comment.

Articles