物質的な資源の向上に伴い、観光は徐々に人々の注目を集めるようになりました。暑い建国記念日が過ぎたばかりなので、この残暑を利用して、人々が普段どこに遊びに行くのかを知りたいと思う人が多いと思います。 Mafengwo の旅行記を収集する小さなプログラムです。もちろん、有名な PHP クローラー フレームワーク phpspider に完全に依存しているため、非常に高速です。
国際的な実践、最初にコードの書き方を見てみましょう。導入として考えてみましょう ^_^
Mafengwo は同時実行性が高く、一部のデータはリアルタイムである必要があるため、通常の Web サイトとは異なります。閲覧者数やいいね数などに影響するため、Web サイト Ajax は多くの場所で使用されており、一般のコレクターにとって Ajax は比較的大きな問題です。
Mafengwo の Web サイトを観察し、最終的に収集ルートを決定しました:
人気の都市を取得 -> 旅行ノートの内容を取得 -> 旅行ノートのタイトル、都市、出発地を抽出旅行記のコンテンツの時間などを設定し、次に 3 つのステップを使用して実装します。 。 。
1. 人気の都市を取得します
まず、これらの人気の都市を収集する必要があります
ページ番号をクリックすると、データが Ajax によってロードされ、最後のページが 297 で、POST メソッドが使用されていることがわかりました
送信されたパラメータは次のとおりです:
明らかにこのページはページ番号、ここで問題が発生します。phpspider フレームワークには URL が 1 つしかありませんが、?page=1|2|3 を追加できます。コードは次のように記述できます:
リストページのルールを設定します:
'list_url_regexes' => array( "http://www.mafengwo.cn/mdd/base/list/pagedata_citylist?page=d+", )
入口のコールバック関数ですべての都市をリストします:
$spider->on_scan_page = function($page, $content, $phpspider) { // 上面Ajax分页的末页是297页 for ($i = 0; $i $url, 'method' => 'post', 'fields' => array( 'mddid'=>21536, 'page'=>$i, ) ); // 热点城市列表页URL入队列 $phpspider->add_url($url, $options); } };
2. 人気のある都市の下にある旅行メモのリストを取得します
クリックして都市を入力すると、下に旅行記リスト
が表示されます。もちろん、Ajax によって読み込まれます。Chrome の開発者ツールを開き、[ネットワーク] をクリックします。ページをクリックして Ajax URL を取得します:
都市リストと同じで、これも POST であり、パラメーターは次のとおりです:
もちろん、page はページ数です。 POST を通じて Ajax アドレスに直接アクセスします:
http://www.mafengwo.cn/gonglve/ajax.php?act=get_t ...
はエラーを直接報告します。上記に基づいて、ソースが必要です。私たちのコードは次のように書くことができます:
まず、on_start コールバック関数にソース URL を追加する必要があります
$spider->on_start = function($phpspider) { $phpspider->add_header('Referer','http://www.mafengwo.cn/mdd/citylist/21536.html'); };
上記の都市リストの取得と同じように、ルールに一致するリストを設定します:
'list_url_regexes' => array( "http://www.mafengwo.cn/gonglve/ajax.php?act=get_travellist&mddid=d+", )
次に、on_list_page コールバックで、決定します最初のページの場合は、合計ページ数を取得し、キューにループします:
preg_match('#<span class="count">共<span>(.*?)</span>页#', $data_page, $out); for ($i = 0; $i < $out[1]; $i++) { $v = $page['request']['fields']['mddid']; $url = "http://www.mafengwo.cn/gonglve/ajax.php?act=get_travellist&mddid={$v}&page={$i}"; $options = array( 'url_type' => $url, 'method' => 'post', 'fields' => array( 'mddid'=>$v, 'pageid'=>'mdd_index', 'sort'=>1, 'cost'=>0, 'days'=>0, 'month'=>0, 'tagid'=>0, 'page'=>$i, ) ); // 游记列表页URL入队列 $phpspider->add_url($url, $options); }
上記の 2 つのステップを通じて、すべての人気のある都市の旅行記リストをキューに追加し、3 番目のページに進みます。ステップでは、これらのリストからコンテンツ ページの URL を取得し、コンテンツを抽出します。
3. 人気の都市の旅行記のリストを取得します
on_list_page メソッドで、リスト ページのコンテンツを取得します。これらのコンテンツからコンテンツ ページの URL を抽出できます
// 获取内容页 preg_match_all('#<a href="/i/(.*?).html" target="_blank">#', $html, $out); if (!empty($out[1])) { foreach ($out[1] as $v) { $url = "http://www.mafengwo.cn/i/{$v}.html"; // 内容页URL入队列 $phpspider->add_url($url); } }
フィールドを設定しましょう。コンテンツ ページ フィールドを抽出するには
'fields' => array( // 标题 array( 'name' => "name", 'selector' => "//h1[contains(@class,'headtext')]", 'required' => true, ), // 分类 array( 'name' => "city", 'selector' => "//div[contains(@class,'relation_mdd')]//a", 'required' => true, ), // 出发时间 array( 'name' => "date", 'selector' => "//li[contains(@class,'time')]", 'required' => true, ), )
データ テーブルを設計します:
もちろん、トラベル ノートのビュー、コレクション、シェア、ピン、プレイ金額なども取得できます。そして方法も似ています。
この時点でプログラムは合計 200 行未満のコードで設計されていますが、phpspider のマルチプロセス収集機能のおかげで、合計 7W 以上のデータ収集が迅速に完了しました。
このデータを取得した後、何ができるでしょうか? !
トップ10の観光都市は
雲南省が良い場所であることがわかり、ブロガーが昼夜問わず恋しい場所でもあります。 。 。
メーデーと建国記念日の観光都市の割合
人々がメーデーの時期にチベットに行くのが好きなのはわかりますが、国慶節の時期には青島の方が人気があります。まあ、ブロガーはこれらの2つの場所に行ったことがなく、非常に傷ついています~_~。 !
次に、今年の北京と杭州の観光シーズンのピークを見てみましょう
7月と8月に北京に行く人が増えることがわかりますが、この時期は北京が最も快適です。暑くも寒くもなく、ボー ある年の8月に北京に行ったことがあるのですが、とても快適でした^_^
また杭州を見てみましょう
春は暖かく、天気が良いので杭州を訪れるのに適した季節です。毎年その時期には太子湾公園に桜とチューリップが咲くと聞きました。エマはとても美しいです。また旅行バグ~_~!
さて、これで記事は終わりですが、実は人気ルート、人気アトラクション、人気フォトアルバム、旅行ルートの料金などをさらに分析して、最終的に形にしていきたいと思っています。良いアイデアがあれば、私に教えてください。参考のために集めました^_^