1. 環境設定
1) サーバーを構築します。Linux ならどれでも構いません。私は CentOS 6.5 を使用します。
2) mysql データベース (5.5 または 5.6) をインストールします。トラブルを避けるために、lnmp または Lamp を使用して直接インストールすることもできます。
3) まず、node.js 環境をインストールします。私は 0.12.7 を使用しています。
4) npm -g install four を実行して永久にインストールし、クローラーがバックグラウンドで実行できるようにします。
5) すべてのコードをローカルで整理します (統合 = git clone)。
6) プロジェクト ディレクトリで npm install を実行して、依存ライブラリをインストールします。7) プロジェクト ディレクトリに 2 つの空のフォルダー (json と avatar) を作成します。
8) 空の mysql データベースと完全な権限を持つユーザーを作成し、コード内の setup.sql と startusers.sql を連続して実行し、データベース構造を作成して初期シード ユーザーをインポートします。9) config.js を編集します。(必須) マークが付いている設定項目は入力または変更する必要があります。残りの項目は当面は変更しないでください。
exports.jsonPath = "./json/";//生成json文件的路径 exports.avatarPath = "./avatar/";//保存头像文件的路径 exports.dbconfig = { host: 'localhost',//数据库服务器(必须) user: 'dbuser',//数据库用户名(必须) password: 'dbpassword',//数据库密码(必须) database: 'dbname',//数据库名(必须) port: 3306,//数据库服务器端口 poolSize: 20, acquireTimeout: 30000 }; exports.urlpre = "http://www.jb51.net/";//脚本网址 exports.urlzhuanlanpre = "http://www.jb51.net/list/index_96.htm/";//脚本网址 exports.WPurl = "www.xxx.com";//要发布文章的wordpress网站地址 exports.WPusername = "publishuser";//发布文章的用户名 exports.WPpassword = "publishpassword";//发布文章用户的密码 exports.WPurlavatarpre = "http://www.xxx.com/avatar/";//发布文章中替代原始头像的url地址 exports.mailservice = "QQ";//邮件通知服务类型,也可以用Gmail,前提是你访问得了Gmail(必须) exports.mailuser = "12345@qq.com";//邮箱用户名(必须) exports.mailpass = "qqpassword";//邮箱密码(必须) exports.mailfrom = "12345@qq.com";//发送邮件地址(必须,一般与用户名所属邮箱一致) exports.mailto = "12345@qq.com";//接收通知邮件地址(必须)
クローラーの原理は、実際には、実際の Zhihu ユーザーが Web サイト上をクリックしてデータを収集することをシミュレートすることであるため、実際の Zhihu ユーザーが必要です。 テストの場合は自分のアカウントを使用できますが、長期的な理由から、特別なアカウントを登録することをお勧めします。現在のクローラーは 1 つだけをサポートします。 私たちのシミュレーション プロセスは、実際のユーザーのようにホームページからログインする必要はありませんが、Cookie の値を直接借用します: 登録、アクティブ化、ログインした後、ホームページにアクセスし、開発者モードまたは Cookie プラグインを備えたブラウザを使用して、Zhihu で独自の Cookie を開きます。 非常に複雑なリストがあるかもしれませんが、必要なのはその一部、つまり「z_c0」だけです。 等号、引用符、セミコロンを除いて、独自の Cookie の z_c0 部分をコピーします。最終的な形式はおおよそ次のようになります:
z_c0="LA8kJIJFdDSOA883wkUGJIRE8jVNKSOQfB9430=|1420113988|a6ea18bc1b23ea469e3b5fb2e33c2828439cb";
実行には永久を使用することをお勧めします。これにより、バックグラウンドでの実行とログ記録が容易になるだけでなく、クラッシュ後に自動的に再起動されます。 例:
forever -l /var/www/log.txt index.js
各ステージの機能は次のセクションで紹介します。操作を容易にするために、次のコマンド行を sh スクリプトとして作成できます。たとえば、
特定のパスを独自のパスに置き換えてください。このように、./zhihuspider.sh にパラメーターを追加することでクローラーを開始できます。たとえば、./zhihuspider.sh -i -ng -nf と指定すると、タスクがすぐに開始され、新しいユーザーとファイルの保存段階がスキップされます。クローラーを停止する方法は永久停止オール(またはシリアル番号停止)です。
4. 原則の概要
Zhihu クローラーのエントリ ファイルがindex.js であることを確認してください。クローラー タスクを毎日指定された時刻にループで実行します。毎日順番に実行されるタスクが 3 つあります。
1) getnewuser.js: 現在のライブラリ内のユーザー フォロワーのリストを比較して、新しいユーザー情報を取得し、価値のあるユーザーを自動的にリストすることができます。 Zhihu 新しい人がライブラリに追加されました
2) usersnapshot.js: 現在のライブラリ内のユーザー情報と回答リストをキャプチャし、毎日のスナップショットの形式で保存するループ。
3) saveviewfile.js: 最新のスナップショットの内容に基づいてユーザー分析リストを生成し、昨日、最近、および過去の本質的な回答をフィルタリングして除外し、それらを「観志湖」のウェブサイト。
上記の 3 つのタスクが完了すると、メイン スレッドは数分ごとに Zhihu ホームページを更新し、現在の Cookie がまだ有効であるかどうかを確認し、無効な場合は (非ログイン ページにジャンプします)、通知メールが送信されます。指定されたメールボックスに送信されます。期限内に Cookie を変更するよう通知します。 Cookieの変更方法は初期化時と同じで、一度手動でログインしてCookieの値を取り出すだけです。特定のコード実装に興味がある場合は、内部のコメントを注意深く読んだり、構成を調整したり、クローラー全体を自分で再構築してみることもできます。
ヒント
1) getnewuser の原則は、前後 2 日間のスナップショットのユーザーのフォロー数を比較してキャプチャを指定することです。そのため、開始する前に少なくとも 2 つのスナップショットが必要です。が前に実行されると、自動的にスキップされます。
2) スナップショットの半分を復元できます。プログラムがエラーによりクラッシュした場合は、永久停止を使用してプログラムを停止し、パラメーター -i -ng を追加してプログラムを直ちに実行し、新しいユーザー フェーズをスキップします。これにより、半分キャプチャされたスナップショットから続行できるようになります。
3) スナップショットを取得するときの (疑似) スレッドの数、つまり usersnapshots の maxthreadcount 属性を簡単に増やさないでください。スレッドが多すぎると 429 エラーが発生し、キャプチャされた大量のデータが時間内にデータベースに書き込まれず、メモリ オーバーフローが発生する可能性があります。したがって、データベースが SSD 上にない限り、スレッドは 10 を超えないようにしてください。
4) 分析結果を生成するためにビューファイルを保存する作業には、少なくとも過去 7 日間のスナップショットが必要です。スナップショットの内容が 7 日未満である場合、エラーが報告され、スキップされます。以前の分析作業は、データベースに手動でクエリを実行することで実行できます。
5) ほとんどの人が「Kanzhihu」をコピーする必要がないことを考慮して、WordPress 記事の自動公開機能へのエントリをコメントアウトしました。 WordPress を設定している場合は、忘れずに xmlrpc を有効にしてから、記事公開専用のユーザーを設定し、config.js で対応するパラメータを設定し、saveviewfile で関連するコードのコメントを解除してください。
6) Zhihu はアバターのリーチ防止処理を実装しているため、ユーザー情報を取得するときにアバターも取得し、記事を公開するときにローカルのアバター アドレスを使用しました。 http サーバーの URL パスでアバターが保存されているフォルダーを指すか、アバターが保存されているフォルダーを Web サイトのディレクトリに直接配置する必要があります。
7) コードは読みにくい可能性があります。 node.js 自体のコールバック構造がわかりにくいことに加えて、私が初めてプログラムを書いたとき、node.js に触れ始めたばかりだったために、構造が混乱する原因となった不慣れな場所が多かったことが原因の 1 つです。混乱していて修正する時間がありませんでした。もう 1 つは、パッチワークに多くの醜い判定条件と再試行ルールが蓄積されているため、それらをすべて削除すると、コード量が 3 分の 2 に削減される可能性があることです。ただし、システムの安定した動作を保証するには、これらを追加する必要があります。
8) このクローラのソース コードは WTFPL プロトコルに基づいており、変更とリリースにいかなる制限も課しません。
以上がこの記事の全内容です。皆様の学習のお役に立てれば幸いです。