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 точно ставил, и ещё что-то… забыл уже :)
cat .bash_history поможет
Разумеется, когда дома :)
Глянул — у меня вроде всё. То есть lxml + то, что у вас в статье уже перечислено.
Да, у меня так же. Тоже для 2.7
Список неточен только из-за того, что у каждого на системе уже что-то может стоять.
Да и если составлять такой список, то надо отследить все зависимости всех используемых библиотек.
Скучно и бессмысленно.
Ну и с другой стороны, никто не говорил, что у утилиты отсутствует порог вхождения.
Ну и с другой стороны, никто не говорил, что у утилиты отсутствует порог вхождения.

Разумеется, он же на каждый чих пишет, что ему не нравится.
Как минимум, я бы добавил lxml, ибо уже минимум у двоих это потребовалось. ;)
UFO just landed and posted this here
Скорее всего chrome будет сохранять статью так, как вы ее видите на экране, с менюшками и прочей рекламой.
Скрипт же выдирает исключительно смысловую нагрузку.
UFO just landed and posted this 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 just landed and posted this here
Да. Я взял чужой парсер и сделал к нему обертку. Ну и доработал маленько кое-где.

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

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

Articles