亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 php教程 PHP源碼 用 PHP 爬蟲做旅遊數(shù)據(jù)分析

用 PHP 爬蟲做旅遊數(shù)據(jù)分析

Nov 11, 2016 pm 03:15 PM

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

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

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

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

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

1、取得熱門城市


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

用 PHP 爬蟲做旅遊數(shù)據(jù)分析

我們點選頁數(shù)的時候,發(fā)現(xiàn)他的資料是Ajax載入的,末頁是297,而且使用的是POST方法用 PHP 爬蟲做旅遊數(shù)據(jù)分析

提交的參數(shù)如下:用 PHP 爬蟲做旅遊數(shù)據(jù)分析

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

設(shè)定列表頁規(guī)則:

'list_url_regexes' => array(
    "http://www.mafengwo.cn/mdd/base/list/pagedata_citylist?page=d+",
)

在入口回調(diào)函數(shù)入口所有城市列表:

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

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

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

http://www.mafengwo.cn/gonglve/ajax.php?act=get_t …

是直接報錯的,他需要來路,綜合以上,我們程式碼可以這麼來寫:

首先我們要在on_start 回呼函數(shù)裡面加上來路URL

$spider->on_start = function($phpspider)
{
    $phpspider->add_header('Referer','http://www.mafengwo.cn/mdd/citylist/21536.html');
};

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

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

和上面獲取城市列表一樣,設(shè)定列表匹配規(guī)則:

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 回調(diào)裡面判斷如果是第一頁就獲取總頁數(shù),然後循環(huán)入隊列:

// 獲取內(nèi)容頁
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";
        // 內(nèi)容頁URL入隊列
        $phpspider->add_url($url);
    }
}

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

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

在on_list_page 方法裡面會得到清單頁的內(nèi)容,從這些內(nèi)容裡面我們可以提取內(nèi)容頁的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,
    ),
    // 出發(fā)時間
    array(
        &#39;name&#39; => "date",
        &#39;selector&#39; => "//li[contains(@class,&#39;time&#39;)]",
        &#39;required&#39; => true,
    ),
)

下來我們來設(shè)定field提取內(nèi)容頁欄位

rrreee

rrreee

下來我們來設(shè)定field提取內(nèi)容頁欄位

rrreee

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

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

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

用 PHP 爬蟲做旅遊數(shù)據(jù)分析

得到這些數(shù)據(jù)以後,我們能做什麼呢? !

用 PHP 爬蟲做旅遊數(shù)據(jù)分析Top10 旅遊城市分別是

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

用 PHP 爬蟲做旅遊數(shù)據(jù)分析

用 PHP 爬蟲做旅遊數(shù)據(jù)分析

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

~

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

1用 PHP 爬蟲做旅遊數(shù)據(jù)分析

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

我們再來看看杭州

1用 PHP 爬蟲做旅遊數(shù)據(jù)分析

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

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


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

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整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72