こんにちは、同僚!
多くの人が知っているように、2014年9月14日に単一の投票日が開催され、ロシアの多くの地域で議員と市長が選出されます。
同時に、私の意見では、情報サポートは不十分です。 主な不便な点は、候補者に関する情報をリストで見ることができず、詳細なしのリスト (20人でページ付けされたもの以外)と詳細を持つ1人の人だけを見ることができないことです。
晴れた夏の日に、この情報を簡単に分析し、候補者を明確かつ賢明に選択できるようにするために、この情報を入手するというアイデアが思いつきました。 残念ながら、CECはすべての選挙に対してエクスポートオプションを提供していません(少なくとも私はそれを見つけていませんでした)。そのため、ソリューションはページをロボットで解析しています。
最初の決定はロックでした。私は言語に関する知識を統合し、新しいPlayフレームワークに対処したかったのです。 パーサーは書いて、テストしましたが、残念ながら、Playのドキュメントをマスターしていませんでした。長い間、最初の質問に対する答えを見つけることができませんでした。 その後、私はDjangoフレームワークを扱うことにしました。ドキュメントがすべて良くなったので、パーサーはPython用に書き直されました。
プロジェクトはGithubで表示できます。scala-parserフォルダーはRock上のパーサーから残ります。
開発プロセス中にモデルをコンパイルすると、素晴らしいボーナスが見つかりました。選挙への候補者の参加の全履歴を取得できます(CECが現在の形式に切り替えられた2007年以降、特に1リソース自体は2003年に開始されました)。 実際、これはプロジェクトの主要な価値とみなすことができます。なぜなら、投票者は、この候補者または候補者が選挙に参加した場所、時間、誰と情報を入手できるからです。 選挙のリスト、候補者が選挙に参加した回数の列が表示されます。候補者のページに移動して、すべての選挙とすべての情報を確認できます。 私の知る限り、フルネームと生年月日のペアはロシア国民に固有のものであるため、間違いはありません。
モデルは、 明白なデザイン 、選挙オブジェクト(名前、日付、リンク)、人物オブジェクト(名前、生年月日)、情報オブジェクトであり、特定の選挙および特定の人物へのリンクを持つ選挙のすべてのデータを持ちます。
BeautifulSoupライブラリを使用してPythonでサイトを解析する方法については、 こちらをご覧ください 。 開発中、私は委員会に関する問題を解決する必要がありました。これは、候補者の日付とデータベースに入力された氏名と混同されることがあります。選挙処理の最後にすべての情報レコードの更新日を確認します。 候補者の情報を更新する日付が選挙を更新する日付よりはるかに短い場合、この情報は不要であり、削除できます。
そして、最も一般的なDjangoプロジェクトが登場します。これは特に興味のないものです
動的なフィルターと並べ替えの場合、テーブルはjsライブラリーhttp://tablefilter.free.fr/を使用します
当初、プロジェクトはHerokuに投稿されましたが、データベースの無料制限(10,000行以内)をすぐに超えました。現在、モスクワ地方、モスクワ、サンクトペテルブルクでの選挙を解析した後、候補者の数は約5万人です。 このプロジェクトのスポンサーについてのFacebookの叫びは、私にSergei Arsentyevから無料の仮想サーバーを提供してくれました。
Nginxを使用してGunicornを介してDjangoプロジェクト用にsshでLinuxサーバーをセットアップしたのはこれが初めてでした。そのため、知識の増加は驚くべきものでした。 何らかの理由で、トピックに誰かがいる場合、Upstartから起動したときにログが書き込まれないという1つの質問が残っています-help。 UpstartおよびNginxの設定もgithubにあります。
実際には、作業サイトへのリンク自体
Elections.istra-da.ru
例えば、モスクワ市下院への選挙に関する情報はここにあります:
選挙.istra-da.ru / election / 1399
必要に応じて、地域や地域に名前を付けて、ロボットのタスクにも含めます。 私はまだすべての地域をスキャンしていません。モスクワ地域、モスクワ、サンクトペテルブルクのみです。CECが気分を害することはなく、パーサーをブロックすることを恐れています。
コメント、アドバイス、提案、さらなる開発のためのアイデア、開発支援は大歓迎です