皆さんの多くは、「Habrから記事を保存するだけの場合」という考えに立ち会ったことがあると思います。 同じ考えが一年ちょっと前に思いついた。
Habr、Giktayms、MegamindからPDF形式で記事をダウンロードするためのプログラムの新しいバージョンを紹介します。
新しいプロジェクトはHabraParseと呼ばれます 。
このプロジェクトは、サイトを解析するライブラリと、このライブラリの機能の一部のみを使用するスクリプトで構成されています。 このスクリプトはpython3で記述されており、モジュールdocopt 、 requests 、 weasyprintが必要です(これらはすべて、 pip install nameコマンドで簡単にインストールできます)。
現在、スクリプトには次の機能があります。
- IDで記事をダウンロードします。
- 特定のユーザーのお気に入りURLのリストをダウンロードします。
- お気に入りからPDFまたはHTML形式のフォルダーに記事をダウンロードします(HTML実装は標準ではないため、PDF形式がデフォルトで使用されますが、はるかに長く機能します)。
--gt / --mmオプションを使用すると、 GeekTimes.ruおよびMegamozg.ruから記事を保存できます。
スクリプトパラメータの簡単な説明
使用法:
デフォルトでは、すべてのチームがHabraHabr.ruプロジェクトを使用します。
--gt / --mmオプションを指定すると、スクリプトはGeekTimes.ru/Megamozg.ruで動作します。
チーム:
./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
使用してお楽しみください。 エラーが発生した場合は、PMでメッセージを投げるか、 プロジェクトのgithubページでバグを開始してください 。
誰かが何かを見逃している場合は、コメントに機能リクエストを書いて、可能な限りそれを実装しようとします。
技術的な詳細
実際、Habraparseはまず、ウェブサイトHabrahabr.ru、GeekTimes.ru、MegaMozg.ruの情報を操作するためのライブラリです。
- ユーザーのプロファイルに関する情報を名前で取得します。
- ユーザープロファイルから取得:彼が書いた記事と彼の「お気に入り」に追加した記事。
- 分析とともにID番号で記事を取得します。
図書館の名前は非常に独創的なものとして選ばれました 。
ユーザー情報は、 habr.userモジュールのクラスHabraUser 、 GeektimesUser 、 MegamozgUserに表示され、 以下が含まれます。
- フルネームとニックネーム。
- 登録日;
- 生年月日;
- カルマに関するデータ(カルマ自体、投票数);
- 評価と評価の位置;
- 国、地域、都市。
- フォロワーの数;
- 投稿数;
- コメントの数。
- ハブ、企業へのサブスクリプション。
記事に関する情報は、habr.topicモジュールのクラスHabraTopic 、 MegamozgTopic 、 GeektimesTopicに表示され、 以下が含まれます。
- 記事ID;
- 見出し
- 著者の名前;
- 格付け
- 記事のテキスト(記事のテキストは変換されず、画像へのすべてのリンクなどは影響を受けません)
- コメント:コメントテキスト付きの番号とリスト。
- 記事が配置されているハブのリスト。
このスクリプトは、構文解析にhabrライブラリーを使用し、pdfを生成するためにweasyprintライブラリーを使用します。 Weasyprintは、操作が最も簡単なインターフェイスとして選択され、通常のPDFファイルを生成できる唯一のインターフェイスとして選択されました。 ただし、判明したように、このライブラリは非常に低速です。
うまく機能する他のpdf生成ライブラリを知っている場合は、コメントまたはPMで記述してください。 ただし、開発はもともとpython3で行われたとすぐに言うので、python2の優れたpdfライブラリについて話す必要はありません。
シミュレーションは以上です。 誰もがそれを好きなら、あなたの健康を使用してください! 誰かがこのライブラリに基づいてカードと女性で独自のスクリプトを作成する準備ができている場合、すべてがあなたの手にあります!
UPD。 労働者の要請で、 icoz / habraparse docker containerの画像を更新しました。 使用順序はこちらをご覧ください 。