python画图代码100行_用100行Python代码告诉你国庆那些景点爆满!
閱讀本文大約需要 7 分鐘
本文轉載自zone7
概述
前言
思考
統(tǒng)計結果
爬蟲技術分析
爬蟲代碼實現(xiàn)
爬蟲分析實現(xiàn)
后記
前言
舉國歡慶的國慶節(jié)馬上就要到來了,你想好去哪里看人山人海了嗎?還是窩在家里充電學習呢?說起國慶,塞車與爆滿這兩個詞必不可少,去年國慶我在想要是我能提前知道哪些景點爆滿就好了,就不用去湊熱鬧了。于是我開始折騰,想用 python 抓取有關出行方面的數(shù)據(jù),便有了這篇文章。
弘揚一下社會主義核心價值觀
思考
(此段可跳過)要抓取出行方面的數(shù)據(jù)還不簡單,直接去看看攜程旅游、馬蜂窩這類網(wǎng)站看看有沒有數(shù)據(jù)抓取。但是實際上這些網(wǎng)站并沒有比較好的格式化的數(shù)據(jù)供我們抓取,或許是我沒找到吧。我在想,有沒有什么折中的辦法。然而,就這樣半天過去了,突然想到,要出行肯定會查找相關的出行攻略吧,那么關鍵詞就是一個突破口,可以查詢百度指數(shù)來看看哪些景點被查詢的次數(shù)最多,那么就可以大概知道哪些景點會爆滿了。
統(tǒng)計結果
此次的統(tǒng)計結果只是從側面反映景點爆滿的問題,未必是完全準確的,僅供參考。此次統(tǒng)計的景點共有 100 個:
桂林、三亞、泰山的搜索量都是杠杠的,這第一梯隊的地方能不去就別去了,去了也是人山人海的,爆滿是無疑的了。
捂臉.jpg
top0-10
第二梯隊的搜索量也不差,日均搜索量還是上萬的,謹慎行動。
top10-20
第三梯隊下來就可以考慮考慮,為了避免不必要的塞車與等待,建議大家還是呆在家里吧!!!
top20-30
第四梯隊應該沒太大的問題,建議出去溜達溜達。
top30-40
都到第五梯隊了,就可以放心地玩耍了。經(jīng)歷了那么多的煩心事,是該好好放飛一下自己了。
top40-50
爬蟲技術分析
請求庫:selenium
HTML 解析:使用正則匹配
數(shù)據(jù)可視化:pyecharts
數(shù)據(jù)庫:MongoDB
數(shù)據(jù)庫連接:pymongo
爬蟲分析實現(xiàn)
此次文章能夠實現(xiàn)參考效果,完全是因為抖機靈。首先是選取爬蟲來源,攜程與馬蜂窩沒有結構化的數(shù)據(jù),我們就換一種思路。首先是想到百度指數(shù),如圖:
百度指數(shù)
但是,分析源代碼之后,你就會發(fā)現(xiàn)坑爹之處了,它的數(shù)據(jù)都是以圖片展示的,你不能直接獲取到源碼,考慮到國慶馬上就要到來,我換了一個指數(shù)平臺,轉戰(zhàn)搜狗指數(shù),這個平臺可以直接獲取到源數(shù)據(jù),關鍵是,還有微信熱度可以爬取。當然,你執(zhí)意要使用百度指數(shù),這里也是有方法的,抓取到數(shù)據(jù)之后,使用圖像識別來識別文中的數(shù)據(jù),提供一篇有思路的文章 [爬蟲實戰(zhàn)——四大指數(shù)之百度指數(shù)(三)]。
關于數(shù)據(jù)清洗方面,這里篩選了數(shù)據(jù)量過小,和數(shù)據(jù)量異常大的景點,詳情在源碼中查看。
搜狗指數(shù)
#?這是數(shù)據(jù)展示的代碼片段def?show_data(self):????for?index?in?range(5):????????queryArgs?=?{"day_avg_pv":?{"$lt":?100000}}????????rets?=?self.zfdb.national_month_index.find(queryArgs).sort("day_avg_pv",?pymongo.DESCENDING).limit(10).skip(index*10)????????atts?=?[]????????values?=?[]????????file_name?=?"top"?+?str(index?*?10)?+?"-"?+?str((index?+?1)?*?10)?+?".html"????????for?ret?in?rets:????????????print(ret)????????????atts.append(ret["address"])????????????values.append(ret["day_avg_pv"])????????self.show_line("各景點?30?天內(nèi)平均搜索量",?atts,?values)????????os.rename("render.html",?file_name)
爬蟲代碼實現(xiàn)
由于篇幅原因,這就只展示主要代碼,詳情請查看源碼,點擊閱讀原文獲取源碼。
#?這是數(shù)據(jù)爬取的代碼片段def?get_index_data(self):????try:????????for?url?in?self.get_url():????????????print("當前地址為:"?+?url)????????????self.browser.get(url)????????????self.browser.implicitly_wait(10)????????????ret?=?re.findall(r'root.SG.data?=?(.*)}]};',?self.browser.page_source)????????????totalJson?=?json.loads(ret[0]?+?"}]}")????????????topPvDataList?=?totalJson["topPvDataList"]????????????infoList?=?totalJson["infoList"]????????????pvList?=?totalJson["pvList"]????????????for?index,?info?in?enumerate(infoList):????????????????for?pvDate?in?pvList[index]:????????????????????print("index?=>?"+str(index)+"地址?=>?"+info["kwdName"]?+?"日期?=>?"?+?str(pvDate["date"])?+?"?=>?"?+?str(pvDate["pv"])?+?"?=>?"?+?str(????????????????????????info["avgWapPv"])?+?"?=>?"?+?str(info["kwdSumPv"]["sumPv"])?+?"?=>?")????????????????????self.zfdb.national_day_index.insert({????????????????????????"address":?info["kwdName"],??#?地名????????????????????????"date":?pvDate["date"],??#?日期????????????????????????"day_pv":?pvDate["pv"],??#?日訪問量????????????????????})????????????????self.zfdb.national_month_index.insert({????????????????????"address":?info["kwdName"],??#?地名????????????????????"day_avg_pv":?info["avgWapPv"],??#?平均訪問量????????????????????"sum_pv":?info["kwdSumPv"]["sumPv"],??#?總訪問量????????????????})????except?:????????print("exception")
后記
整篇爬蟲文章分析到這里就結束,不過還是對百度指數(shù)很有執(zhí)念,想找個時間寫一篇相關的文章才行,不搞定它感覺心里有塊疙瘩,或許這就是程序員最后的倔強,最后祝大家國慶假期愉快,不用寫代碼。
總結
以上是生活随笔為你收集整理的python画图代码100行_用100行Python代码告诉你国庆那些景点爆满!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 明翰英语教学系列之雅思阅读篇V0.9(持
- 下一篇: 音频特效生成与算法 1