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