隨著旅游業的不斷發展,旅游信息變得非常豐富。為了方便大家獲取更全面、準確的旅游信息,我們可以使用爬蟲來抓取旅游網站上的數據,并進行分析和處理。本文將介紹如何使用php爬取攜程旅游信息。
- 爬蟲基礎知識
爬蟲是一種自動化程序,可以模擬用戶訪問網站并獲取網站上的數據。爬蟲一般分為以下幾步:
- 發起請求:爬蟲程序會向目標網站發起HTTP請求,獲取目標網站的HTML代碼。
- 解析HTML:使用適當的解析器對HTML代碼進行解析,并獲取需要的數據。常見的解析器有正則表達式、XPath和DOM解析器等。
- 存儲數據:將獲取到的數據存儲到文件或數據庫中,以便后續分析和處理。
- 目標網站分析
在編寫爬蟲之前,首先需要分析目標網站的結構和數據。本次爬蟲的目標網站是攜程旅游網站。我們需要分析該網站的URL結構和HTML代碼,以確定請求方式和解析方式。
2.1 URL結構分析
攜程旅游網站的URL結構比較簡單,每個旅游產品都有一個唯一的ID號。以瀏覽北京旅游為例,其URL為:https://you.ctrip.com/sight/beijing1.html。其中,beijing1表示北京旅游的ID號。
立即學習“PHP免費學習筆記(深入)”;
2.2 HTML代碼分析
使用Chrome瀏覽器的開發者工具查看該網頁的HTML代碼,可以發現頁面上的旅游信息都在一個class為“list_mod2”的div中。該div中包含了每個旅游產品的詳細信息,包括產品名稱、價格、評價等。在爬蟲程序中,我們需要使用PHP的DOM解析器來解析這些信息。
- 爬蟲程序編寫
現在我們已經了解了目標網站的URL結構和HTML代碼,可以編寫爬蟲程序來獲取旅游信息。
3.1 發起HTTP請求
首先,我們需要使用PHP的cURL庫來向目標網站發起HTTP請求,獲取目標網站的HTML代碼。在代碼中,我們使用了一個循環,從ID=1開始,依次獲取各個旅游產品的詳細信息。
1 2 3 4 5 6 7 8 9 | //爬取ID號從1到n的旅游產品的詳細信息 for ( $i =1; $i <= $n ; $i ++){ ???? $url = "https://you.ctrip.com/sight/beijing$i.html" ; //目標網站URL ???? $ch = curl_init(); ???? curl_setopt( $ch , CURLOPT_URL, $url ); ???? curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); ???? $html = curl_exec( $ch ); ???? curl_close( $ch ); ???? } |
3.2 解析HTML代碼
接下來,我們使用PHP的DOM解析器來解析目標網站的HTML代碼,并獲取我們需要的旅游產品信息。在代碼中,我們使用了XPath表達式來選擇class為“list_mod2”的div,并獲取其中的產品名稱、價格、評價等信息。
1 2 3 4 5 6 7 8 9 10 11 12 | $doc = new DOMDocument(); $doc ->loadHTML( $html ); $xpath = new DOMXPath( $doc ); $list_mod2 = $xpath ->query( '//*[@class="list_mod2"]' ); //選擇 class 為 "list_mod2" 的div foreach ( $list_mod2 as $mod ){ ???? $modImg = $xpath ->query( 'a/img/@src' , $mod )->item(0)->nodeValue; //獲取產品圖片URL ???? $modTitle = $xpath ->query( 'div/h2/a' , $mod )->item(0)->nodeValue; //獲取產品名稱 ???? $modContent = $xpath ->query( 'div/div/div/p/@title' , $mod )->item(0)->nodeValue; //獲取產品簡介 ???? $modPrice = $xpath ->query( 'div/div/span/em' , $mod )->item(0)->nodeValue; //獲取產品價格 ???? $modComment = $xpath ->query( 'div/div/div/div/span[1]' , $mod )->item(0)->nodeValue; //獲取產品評價分數 ???? $modCommentNum = $xpath ->query( 'div/div/div/div/span[2]' , $mod )->item(0)->nodeValue; //獲取產品評價人數 } |
3.3 存儲數據
最后,我們將獲取到的旅游產品信息存儲到數據庫中。在代碼中,我們使用了PHP的PDO擴展來連接數據庫,并將獲取到的產品信息插入到名為“product_info”的數據庫表中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //連接數據庫 $dsn = 'mysql:host=localhost;port=3306;dbname=test;charset=utf8' ; $username = 'root' ; $password = '123456' ; $options = array (PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); $dbh = new PDO( $dsn , $username , $password , $options ); //將獲取到的產品信息插入到數據庫 $stmt = $dbh ->prepare( "INSERT INTO product_info(img_url, title, content, price, comment_score, comment_num) VALUES(?, ?, ?, ?, ?, ?)" ); $stmt ->bindParam(1, $modImg ); $stmt ->bindParam(2, $modTitle ); $stmt ->bindParam(3, $modContent ); $stmt ->bindParam(4, $modPrice ); $stmt ->bindParam(5, $modComment ); $stmt ->bindParam(6, $modCommentNum ); $stmt ->execute(); |
- 總結
使用PHP編寫爬蟲程序,可以輕松地抓取攜程旅游網站的旅游產品信息,并將其存儲到數據庫中。在實際開發中,我們還可以使用多線程、IP代理等技術來提高爬蟲程序的效率和穩定性。然而,需要注意的是,在使用爬蟲程序的過程中,應當尊重目標網站的版權和隱私政策,避免侵權和濫用。