成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Python偷偷告訴你國慶8億人都去哪兒浪?

原創
開發 后端 開發工具
祖國 70 周年的華誕一天天臨近,各行各業都在為祖國母親慶祝生日。作為一個 IT 人,也想貢獻一份綿薄之力。

【51CTO.com原創稿件】祖國 70 周年的華誕一天天臨近,各行各業都在為祖國母親慶祝生日。作為一個 IT 人,也想貢獻一份綿薄之力。

?[[278158]]?

圖片來自 Pexels

據文化和旅游部消息稱,預計 2019 年國慶旅游人次有望達到近 8 億。

?[[278159]]?

#國慶假期或有近 8 億人次出游#這個話題還沖上了微博熱搜榜。

??

我仿佛已經看到了假期景區人山人海的畫面!

??

??

左思右想,最后落腳到國慶長假的旅游上,能否用網絡爬蟲看看,十一長假哪些城市最堵?哪些景區最熱門?


?[[278162]]?

今天一起來看看,如何利用網絡爬蟲生成國慶期間的旅游熱點圖吧。

需求構思

制作一張旅游熱點圖,我們想要達到的效果是,在一張中國地圖上面標注出旅游熱點。

通過這張圖可以知道哪些城市,或者哪些區域是十一期間的旅游熱點。也就是說哪些地方在國慶期間去玩的人多。

??

構思圖

首先,我們要找一個數據源能夠獲取全國旅游信息。這里有一個思路就是訂票信息,哪些景點的訂票比較多,那么這些景點所在的城市就越熱門。類似的售票網站比較多,例如:攜程,去哪兒,途牛旅游之類的。

然后,需要分析網站上面的票務數據,將我們感興趣的旅游熱點信息爬取下來。分析信息的重點是針對網頁 HTML 信息的解析。

之后,將分析完畢的信息按照一定格式保存到本地,由于下載的信息可能和最終展示信息存在偏差,所以需要做一些數據清洗和數據聚合的操作。

最后,將整理好的信息輸入到地圖上顯示出來,這也是最后展示的環節。這里可以選擇對外展示的方式,例如:點圖,線圖,或者熱力圖。

網站分析

全局預覽

找了一圈旅游網站以后,發現在“去哪兒”的門票頁面中,有一個對旅游景點熱度的展示信息。

網頁會根據不同類型景點(自然風光,文化古跡等)進行查詢,查詢的結果會顯示景點名稱,景點熱度和城市信息。

如果我們將這些景點對應的區域的熱度進行匯總,就可以知道哪些區域對應的景點熱度了。

先打開去哪兒旅游,搜索“熱門景點”。下面列出了各個地方的熱門旅游景點。

??

針對景點主題做了分類,在展示的列表中,有景點名稱,景點級別,所在省市,以及熱度。其中省市和熱點是我們關心的數據。

URL 分析

??

URL 分析圖

打開 Chrome 的開發者工具來看看 HTML 頁面的結構。URL 的規律很容易能夠看明白:

  • Keyword 就是“熱門景點”,它是個常量,每次請求填寫這個就行了。
  • Subject 是景點分類,例如:自然風光,游樂場,文化古跡等等。這個需要一一羅列出來,是在一個變量后面用數組存放。
  • Page 是頁數,如果我們要爬取所有的信息,需要一頁一頁往下翻,所以這個數字會不斷增長。頁面滑動到最下方的時候,會看到 Next 按鈕,可以通過這個按鈕將所有頁面都遍歷到。

??

URL 全景圖

頁面元素分析

通過 Chrome 開發者工具中的元素選擇器,可以清楚地看到元素的 HTML 標簽。

??

列表元素圖

由于景點信息放在一個列表中,所以找到列表所在的元素,它放在 id 為“search-list”的 div 中。

也就是說在請求 URL 并獲取 HTML 之后,我就需要找到“search-list”div 并且獲取其中對應的項目信息。

獲取了列表元素之后,再來看看每一項旅游紀錄中的值如何獲取。其內容放在”sight_item”的 div 中。

??

列表中每項的示意圖

接下來分別將景點名稱,景點級別,所在省市,熱度,地址分別做分析。并且記錄他們元素的值在后面解析 HTML 的時候可以用到。

元素的 HTML 標簽獲取類似上面兩個元素。把上面這些元素的 ID 或者 Class 可以先記錄下來,在后面解析 HTML 的時候會用到。

爬蟲準備

構思和分析都完畢了,我們需要編寫代碼來實現想法。但是,在這之前我們需要把開發環境以及需要的工具準備好。

由于涉及到網絡爬蟲,以及圖形的展示。所以這里計劃使用 Python 作為開發語言,IDE 環境使用 PyCharm,展示圖表用到 Pyecharts。

普及一下 Pyecharts,Echarts 是一個由百度開源的數據可視化,憑借著良好的交互性,精巧的圖表設計,得到了眾多開發者的認可。

而 Python 是一門富有表達力的語言,很適合用于數據處理。當數據分析遇上數據可視化時,Pyecharts 就誕生了。

因此,Pyecharts 可以理解為用 Python 來實現的 Echarts 程序,可以在 Python 上面運行,并且提供良好的地理信息展示。

??

Pyecharts 圖標

另外 Pyecharts 的地理展示功能比較強大,這點也是我們需要利用的。

??

Pyecharts 展示中國地圖

針對 HTML 的解析我們使用了 BeautifulSoup。它是一個可以從 HTML 或 XML 文件中提取數據的 Python 庫,它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式。

?[[278166]]?

BeautifulSoup 官網圖片

爬蟲編碼

萬事具備只欠東風,讓我們開始寫代碼吧,為國慶搬磚讓我快樂。這里我們把程序分成兩個部分來寫,一部分是爬取旅游熱點信息,另一部分是旅游熱點地圖展示。

爬取旅游熱點信息

??

程序流水圖

先說一下獲取旅游熱點信息的思路,大約分為四步:

  • 開始準備必要的文件和引入組件包。
  • 組合變量 URL 并且做網絡請求,請求不成功進行重試。
  • 下載 HTML 以后對其進行解析,找到旅游熱點列表,列表項,分析具體旅游信息。
  • 把分析完的信息保存到 csv 文件中。

因為我們需要請求網絡,解析 HTML,保存文件,所以需要引入一些 Python 的包:

  • 網絡請求
  • HTML 解析
  • 讀寫 csv
  • 在請求頭中偽裝瀏覽器
  • 錯誤重試,等待時間

??

接下來就是創建請求頭,請求頭中包括了請求的瀏覽器,語言,請求格式等信息。

這里我們是使用 fake_useragent 中 UserAgent 的 random 方法隨機產生瀏覽器的信息。

這樣在模擬瀏覽器訪問網站的時候,每次請求都會隨機模擬一種瀏覽器。例如:IE,Firefox,Chrome 等等。讓網站認為是不同的人,用不同的瀏覽器來訪問網站的。

??

接下來生成一個 csv 文件,用 utf-8 格式保存。這個文件是用來存放爬蟲信息。

在文件的表頭,我們分別定義了,“區域”,“名稱”等和景點相關的字段。在文件生成的時候就準備好這些列,等填入數據以后,可以方便查看。

??

定義一個下載景點內容的函數,這個函數接受 URL 作為參數,然后通過 requests 對象下載景點內容。

??

由于下載信息可能會遇到網絡問題,導致下載失敗。所以,我們需要定義一個下載失敗函數,在下載不成功的時候重試下載。

??

還記得之前分析的 URL 嗎?景點的類型和分頁是變量,這里我們定義一個生成 URL 的函數來處理這些變量。

我們會羅列需要搜索的景點類型在其中。Keyword 字段已經轉換成 ACSII 碼了,如果需要直接輸入中文字符,可以使用 from urllib.parse import quote 來實現。

另外,我們的開始搜索的頁面,使用 page=1,之后會解析頁面中的“next”按鈕,完成翻頁的功能。

??

好了,到此我們定義了文件,下載函數,重試下載函數,分類搜集函數,現在要定義最重要的 HTML 解析函數了。它的輸入參數是景點類型和 URL 地址。

依次執行以下工作:

  • 下載 HTML,并且轉換成 SOUP 對象。
  • 找到旅游景點的列表。找到 div 的 id 為‘search-list’的元素。用 soup 的 find 方法找到它。
  • 針對景點的項目進行遍歷。在‘search-list’元素下面,通過 findAll 方法找到 class 是‘sight_item’的項目,并且對其進行遍歷。
  • 解析具體景點信息:名稱,區域,省市,熱度,地址等等。
  • 找到翻頁按鈕,繼續往下載后面的頁面,并且再次解析。通過 find 方法找到 class 是‘next’的 a 標簽。

??

最后,執行 main 函數運行整個 Python 程序:

??

??

下載完成的 csv 圖

csv 看上去比較凌亂,把文件通過 xls 打開,看看格式化以后的熱點信息:

??

整理以后的旅游熱點圖

旅游熱點地圖展示

好了旅游熱點的信息已經抓到了,現在開始分析。這里建議將抓取和分析工作分成兩塊來進行。

因為,在抓取過程中會遇到網絡問題,解析問題或者反爬蟲的問題,而且抓取數據需要一段時間。

為了保證其獨立性,所以信息抓取可以單獨運行。當完成以后,把抓取的文件作為輸入放到展示程序中運行。

展示程序主要完成,數據清洗,匯總求和以及展示地圖的工作。這樣前面的爬蟲和后面的分析展示就連成一體了。

??

旅游熱點分析流程圖

首先我們依舊要引入幾個 Python 包,如下。其中 Geoopts 和 ChartType 都是用來展示地圖用的。

??

其次,我們需要裝載 csv 文件。雖然我們下載了很多信息,但是對于我們最重要的其實是省市和熱點信息。因為我們最后展示出來的就是,哪個城市是旅游的熱點。

??

城市,熱度信息圖

根據觀察,要計算城市的熱度,必須將城市信息分組以后求和,這個也是需要考慮的。

??

根據城市信息對熱度求和

將一些地圖中無法識別的地點,以及一些沒有熱度值的臟數據過濾掉,就可以將生成的城市,熱度列表傳給展示函數了。

??

最后,展示函數接受到列表參數,繪制熱力圖:

??

結果分析

先看看哪些區域是大家比較喜歡的旅游目的地,如下圖:

??

2019 國慶旅游熱力圖

從圖上可以看出北京,沿海地區(福建,廣州),江浙地區,甘肅地區是國慶期間比較熱門的景點。中部地區的武漢,由于軍運會將至,也成為了旅游的熱門城市。

??

2019 國慶旅游熱點圖

再來看看,TOP 20 的旅游熱點城市,如下圖:

??

TOP 20 的 5A 旅游景點:

??

總結

??

爬蟲思維導圖

在網絡爬蟲之前需要根據達到的目標進行構思,包括:選擇網站,分析網站,數據抓取,數據展示。

在分析網站時,需要注意以下幾點,包括全局分析,URL 分析,元素分析。

在爬蟲編程之前,需要針對工具,IDE,Python 類庫進行準備。爬蟲編碼分為,爬取旅游熱點信息和旅游熱點地圖展示。

作者:崔皓

簡介:十六年開發和架構經驗,曾擔任過惠普武漢交付中心技術專家,需求分析師,項目經理,后在創業公司擔任技術/產品經理。善于學習,樂于分享。目前專注于技術架構與研發管理。

??

【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】

 

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2017-09-17 10:05:20

Python景點國慶

2019-10-08 15:08:28

人臉數據AI數據收集

2019-09-29 10:00:46

Python程序員旅游

2015-11-13 09:34:25

流量wifi運營商

2019-04-30 08:49:23

通信人才研發

2014-06-09 16:32:55

大數據大數據人才

2017-05-15 15:54:50

MySQL數據庫

2015-10-23 09:35:57

融資YC創始人投資

2018-02-26 17:42:58

大數據一線城市北上廣深

2018-11-06 13:24:27

爬蟲分析房租

2020-10-09 15:29:48

大數據國慶技術

2013-05-03 14:11:43

程序員

2021-08-11 09:47:57

MySQL 數據InnoDB

2017-09-29 09:29:32

架構技術棧微信半月刊

2024-01-25 17:58:14

OpenAIAI科技公司

2017-10-31 16:06:51

大數據90后消費

2020-01-09 13:24:31

Python 開發編程語言

2021-09-06 11:57:30

Python

2021-04-27 09:33:41

Python北京景點

2015-11-10 10:57:18

流量不清零運營商
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av网站在线免费观看 | 一区二区三区观看视频 | 国产精品一区在线观看你懂的 | 成人国产精品久久 | 日韩在线资源 | 欧美成人一区二区三区 | 噜久寡妇噜噜久久寡妇 | 国产成人99久久亚洲综合精品 | 亚洲国产成人精品女人久久久 | 夜夜撸av| 午夜极品 | 国产午夜精品一区二区三区嫩草 | 亚洲欧美精品国产一级在线 | 超碰伊人久久 | 亚洲国产视频一区二区 | 日韩中文字幕在线观看 | 亚洲国产精品99久久久久久久久 | 91精品国产91久久久久久 | 在线免费国产视频 | 三级视频在线观看 | 成人av在线大片 | 亚洲精品一 | 久久一区二区精品 | 欧美精品乱码99久久影院 | 天天干天天草 | 色www精品视频在线观看 | 日韩精品一区中文字幕 | 人成精品 | 久久久久久国产精品 | 成人在线视频一区 | 亚洲国产日本 | 亚洲一区二区三区福利 | 91热爆在线观看 | 国产精品色 | 国产特级毛片aaaaaa喷潮 | 九九热精 | 精品免费国产一区二区三区 | 欧美成人一区二区三区 | 亚洲精品乱码久久久久久按摩观 | 国产九九精品 | 操久久 |