ホームページ >バックエンド開発 >PHPチュートリアル >PHP が世界で最高の言語であることを証明するためだけに、クローラーを使用して 1 日で 100 万人の Zhihu ユーザーを「盗みました」_PHP チュートリアル

PHP が世界で最高の言語であることを証明するためだけに、クローラーを使用して 1 日で 100 万人の Zhihu ユーザーを「盗みました」_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:08:231748ブラウズ

PHP が世界で最高の言語であることを証明するために、私はクローラーを使用して 1 日で 100 万人の Zhihu ユーザーを「盗みました」

友人のサークルで勧められた Python クローラーの記事をたくさん読んだ後、それらはあまりにも幼稚だと思います。Python の唯一の利点は、Perl と同様に、Linux にネイティブに組み込まれていることです。これでは不十分だと思いますが、Mac には Python、Perl、PHP が付属しています。もちろん、言語の品質について議論するのも嫌いです。どの言語にも存在理由があるはずです。とにかく、PHP は世界のリーダーであり、誰もがそれを理解しています。

数日前に非常に話題になったのは、ある人が C# でマルチスレッド クローラー プログラムを作成し、QQ スペースで 3,000 万人の QQ ユーザーを獲得したということでした。そのうち 300 万人のユーザーは QQ 番号、ニックネーム、スペース名、その他の情報を持っていました。つまり、詳細を含めると、たったの 300 万で、2 週間もかかりました。これは、誰もが知っていることですが、PHP が世界で最高の言語であることを証明するために、マルチを書きました。 -プロセス クローラー プログラム in PHP、使用のみ 1 日で 100 万人の Zhihu ユーザーを獲得し、現在、相互に関連するユーザー (フォロワーとフォロワー) の 8 番目のサークル (深さ = 8) にいます。

クローラープログラミング:

Zhihuはフォロワーページを取得するためにログインする必要があるため、Chromeからログインした後、Cookieをコピーしてcurlプログラムに渡し、ログインをシミュレートします。

2つの独立したループ処理グループ(ユーザーインデックスプロセスグループ、ユーザー詳細プロセスグループ)を使用し、PHPのpcntl拡張機能を使用して、非常に使いやすいクラスをカプセル化しているため、golangのCtripとほぼ同じです。

以下はユーザーの詳細のスクリーンショットです。ユーザーインデックスコードも同様です

余談ですが、テスト後、私の 8 コア Macbook は 16 プロセスを実行するときに最も速く、16 コア Linux サーバーは実際には 8 プロセスを実行するときに最も高速です。最終的なプロセス数については、最適な設定に従ってください。

1. ユーザー インデックス プロセス グループは、最初にユーザーから開始し、ユーザーのフォロワーとフォロワーをキャプチャしてからデータベースにマージします。これはマルチプロセスであるため、同じユーザーをデータベースに処理するプロセスが 2 つある場合、重複したユーザーが表示されるため、データベース内のユーザー名フィールドに一意のインデックスを確立する必要があります。もちろん、これは意見の問題です。

ステップ 1 を通過すると、次のユーザー リストを取得します:

2. ユーザー詳細プロセス グループは、データベースに最初に入力されたユーザー詳細を取得し、更新時刻を現在時刻に更新します。これは無限ループとなり、プログラムが無限に更新される可能性があります。ユーザー情報。

翌日までプログラムは安定して動作していましたが、突然新しいデータがなくなってしまい、Zhihu がルールを変更したことがわかりました。返ってきたデータはこんな感じでした

最初に感じたのは、データが収集できないようにランダムに出力されるということで、IP を変更してデータを偽装しましたが、突然機能しなくなりました。これは gzip だったのでしょうか。懐疑的な態度で gzip を試してみました。もちろん、Zhihu には gzip 圧縮されたデータを渡さないように言いました

「Accept-Encoding: gzip,deflatern」を削除すると機能しなくなります。

Zhihu がデータを gzip 圧縮するように強制しているようです。この場合、gzip を解凍するために PHP を確認したところ、関数 gzinflate が 1 つしかないことが判明したので、取得した内容を追加しました。

$content = substr($content, 10);

$content = gzinflate($content));

もちろん、カールに付属しているものを使用することもできます:

curl_setopt( self::$ch, CURLOPT_ENCODING, 'gzip' );

ここで本当に言いたいのは、PHP は本当に世界で最高の言語であるということです。たった 1 つか 2 つの関数で、問題は完全に解決され、プログラムは再び快適に実行されます。

Zhihu の注意深さは、コンテンツを一致させるときにも数え切れないほど助けてくれました。たとえば、ユーザーの性別を区別する必要があります。

ははは、冗談ですが、実際には、このスタイルには icon-profile-女性とアイコン-プロフィール-男性があります ^_^

これほど多くのユーザーを獲得するのは苦痛です。

実際には役に立たない、ただ退屈しているだけです^_^

この情報があれば、他の人が最初に話したばかりのビッグデータ分析を実際に行うことができます

最も一般的なものはもちろん次のとおりです:

1. 性別分布

2. 地理的分布

3. 職業分布、どこの会社の出身ですか

4.各職業の男女比

5. 人々は通常いつ芝湖に行きますか?質問を投稿し、問題に注目してください。それらの問題は注目に値します

もちろん、フォロワー数、閲覧者数、質問数、回答数などで並べ替えて、人々の暮らし、社会、地理、政治、全体など、何に注目しているのかが分かります。インターネット。 。

おそらく、アバターを分析し、オープンソースのポルノ検出プログラムを使用してポルノを除外し、東莞を救うこともできるでしょうか? ^_^

それでは、大学を卒業した人たちが最終的に何をしたかを見ることもできます。

これらのデータを使って想像力を広げてみませんか ^_^

以下は、これらのデータを使用して作成されたいくつかの興味深いチャートです。リアルタイムのチャート データは http://www.epooll.com/zhihu/

でご覧いただけます。



www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1054684.html技術記事私はクローラーを使用して 1 日で 100 万人の Zhihu ユーザーを「盗みました」 PHP が世界で最高の言語であることを証明するために、友人から勧められた Python クローラーの記事をたくさん読みましたが、どれも幼稚すぎると感じました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。