首頁  >  文章  >  php教程  >  用 PHP 爬蟲做旅遊數據分析

用 PHP 爬蟲做旅遊數據分析

大家讲道理
大家讲道理原創
2016-11-11 15:15:554433瀏覽

隨著物質的提高,旅遊漸漸成為人們的焦點,火熱的國慶剛剛過去,乘著這股餘熱,我想很多人都想知道,大家一般會去哪裡玩呢,於是我花了10分鐘寫了採集馬蜂窩遊記的小程序,當然速度能有這麼快,完全依賴PHP著名爬蟲框架phpspider。

國際慣例,我們先來看看代碼怎麼寫,算作拋磚引玉吧 ^_^

馬蜂窩不同於常規網站,因為並發量高並且某些數據需要實時,比如觀看人數,點讚人數,所以網站多處使用了Ajax,而Ajax對於一般採集者來說,是個比較大的問題。

觀察了一下馬蜂窩網站,最終確定了採集路線:

獲取熱門城市-> 獲取城市下的遊記列表-> 獲取遊記內容-> 提取遊記內容的遊記標題、城市、出發時間等,接下來我們用三個步驟來實現它。 。 。

1、取得熱門城市


http://www.mafengwo.cn/mdd/citylist/21536.html

用 PHP 爬蟲做旅遊數據分析

我們點選頁數的時候,發現他的資料是Ajax載入的,末頁是297,而且使用的是POST方法用 PHP 爬蟲做旅遊數據分析

提交的參數如下:用 PHP 爬蟲做旅遊數據分析

很明顯這個page就是頁數了,這裡就有個問題,phpspider框架是有URL 去重機制的,POST的話URL只有一個,但是query_string是不影響POST資料的,我們可以在後面加上?page=1|2|3…,所以我們程式碼可以這麼寫:用 PHP 爬蟲做旅遊數據分析

設定列表頁規則:

'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的開發者工具,點擊Network,然後隨意點擊一個分頁得到Ajax的URL:用 PHP 爬蟲做旅遊數據分析

和城市列表一樣,也是POST,參數如下:用 PHP 爬蟲做旅遊數據分析

很明顯page就是頁數了,當然我們直接用POST方式訪問Ajax地址:用 PHP 爬蟲做旅遊數據分析

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');
};

和上面獲取城市列表一樣,設定列表匹配裡面加上來路URL

'list_url_regexes' => array(
    "http://www.mafengwo.cn/gonglve/ajax.php?act=get_travellist&mddid=d+", 
)

和上面獲取城市列表一樣,設定列表匹配規則:

preg_match(&#39;#<span class="count">共<span>(.*?)</span>页#&#39;, $data_page, $out);
for ($i = 0; $i < $out[1]; $i++) 
{
    $v = $page[&#39;request&#39;][&#39;fields&#39;][&#39;mddid&#39;];
    $url = "http://www.mafengwo.cn/gonglve/ajax.php?act=get_travellist&mddid={$v}&page={$i}";
    $options = array(
        &#39;url_type&#39; => $url,
        &#39;method&#39; => &#39;post&#39;,
        &#39;fields&#39; => array(
            &#39;mddid&#39;=>$v,
            &#39;pageid&#39;=>&#39;mdd_index&#39;,
            &#39;sort&#39;=>1,
            &#39;cost&#39;=>0,
            &#39;days&#39;=>0,
            &#39;month&#39;=>0,
            &#39;tagid&#39;=>0,
            &#39;page&#39;=>$i,
        )
    );
    // 游记列表页URL入队列
    $phpspider->add_url($url, $options);
}

然後在on_list_page 回調裡面判斷如果是第一頁就獲取總頁數,然後循環入隊列:

// 获取内容页
preg_match_all(&#39;#<a href="/i/(.*?).html" target="_blank">#&#39;, $html, $out);
if (!empty($out[1])) 
{
    foreach ($out[1] as $v) 
    {
        $url = "http://www.mafengwo.cn/i/{$v}.html";
        // 内容页URL入队列
        $phpspider->add_url($url);
    }
}

通過上面兩個步驟,我們就把所有熱門城市下的遊記列表都放入到了隊列,接下來我們進行第三步,從這些清單裡面取得內容頁URL,然後提取內容。

3、取得熱門城市下的遊記清單

在on_list_page 方法裡面會得到清單頁的內容,從這些內容裡面我們可以提取內容頁的URL

&#39;fields&#39; => array(
    // 标题
    array(
        &#39;name&#39; => "name",
        &#39;selector&#39; => "//h1[contains(@class,&#39;headtext&#39;)]",
        &#39;required&#39; => true,
    ),
    // 分类
    array(
        &#39;name&#39; => "city",
        &#39;selector&#39; => "//div[contains(@class,&#39;relation_mdd&#39;)]//a",
        &#39;required&#39; => true,
    ),
    // 出发时间
    array(
        &#39;name&#39; => "date",
        &#39;selector&#39; => "//li[contains(@class,&#39;time&#39;)]",
        &#39;required&#39; => true,
    ),
)

下來我們來設定field提取內容頁欄位

rrreee

rrreee

下來我們來設定field提取內容頁欄位

rrreee

rrreee用 PHP 爬蟲做旅遊數據分析下來我們來設定field提取內容頁欄設計一張資料表:

當然我們還可以獲得遊記的瀏覽量、收藏、分享、置頂、遊玩金額等等,太多了,方法類似。

用 PHP 爬蟲做旅遊數據分析到此程式就設計完了,總共不到200行的程式碼,得益於phpspider自帶了多進程擷取功能,資料很快就採集完成,總共7W多點。

用 PHP 爬蟲做旅遊數據分析

得到這些數據以後,我們能做什麼呢? !

用 PHP 爬蟲做旅遊數據分析Top10 旅遊城市分別是

可以看得出,雲南是個好地方,也是博主日夜思念的地方啊。 。 。 🎜🎜五一和國慶期間旅遊城市佔比🎜

用 PHP 爬蟲做旅遊數據分析

用 PHP 爬蟲做旅遊數據分析

可以看得出,五一的時候大家喜歡去西藏玩,國慶卻更青睞青島,好吧,這兩個地方博主都沒去過,表示好受傷~_~!

~

接下來我們來看看這一年來北京和杭州的旅遊旺季

1用 PHP 爬蟲做旅遊數據分析

可以看出七八月份去北京的人會比較多,這個時候北京是最爽的,不熱也不冷,博主就曾經有一年8月份去的北京,舒服死了^_^

我們再來看看杭州

1用 PHP 爬蟲做旅遊數據分析

看得出3月底到4月中旬是杭州適合遊玩的季節啊,那時候春暖花開,天氣也不錯,聽說太子灣公園每年那時候都會有櫻花和鬱金花展,非常美,艾瑪旅遊病又犯了~_~!

好吧文章到此就結束了,其實還想分析更多,例如採集熱門路線啊,熱門景點啊,熱門圖集啊,還有旅遊路線的價位啊,最終形成一個旅遊的APP,如果你們有好的想法,也可以來告訴我,我把他採集下來,供大家參考^_^


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn