首頁 php教程 PHP源码 用 PHP 爬蟲做旅遊數據分析

用 PHP 爬蟲做旅遊數據分析

Nov 11, 2016 pm 03:15 PM

隨著物質的提高,旅遊漸漸成為人們的焦點,火熱的國慶剛剛過去,乘著這股餘熱,我想很多人都想知道,大家一般會去哪裡玩呢,於是我花了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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)