秋詞—劉禹錫
自古逢秋悲寂寥,
我言秋日勝春朝。
晴空一鶴排云上,
便引詩情到碧霄。
古人談及秋天,都是悲涼寂寥,那么….我好想回到古代的秋天??!明明到了秋天,為什么最近的氣溫比夏天還熱。
之前做天氣預(yù)報自動推送小工具的時候,爬過中國天氣網(wǎng)?
http://www.weather.com.cn/forecast/,今天就再盤它一次,來看看全國天氣吧
首先進入中國天氣網(wǎng),有一個國內(nèi)天氣預(yù)報的欄目:
如上圖所示,網(wǎng)站將中國分為:
華為、東北、華南、西北、西南、華東、華中,西安屬于西北,進去看看:
網(wǎng)站有一個設(shè)置,只要過了當(dāng)天的6點,那么當(dāng)天的白天溫度就清空了…所以我們就來看看,明天全國天氣Top10吧!
看到這溫度,我就想說,三伏天的溫度也不過如此吧….
咱們來分析下這張圖,每個省的第一個城市都是省會城市,省內(nèi)的溫度差別不大,那我們就把全國每個省會城市的溫度進行比較吧,至于港澳臺…暫且不分析。
網(wǎng)站分析
網(wǎng)站html分析
每日天氣
-
conMidtab一共有7個,后6個添加了隱藏樣式style="display:none;"
,是后6天的天氣預(yù)報,既然咱們看的是明天天氣,就選擇第二個吧… -
各省天氣
每個省份的數(shù)據(jù)都包過在這個div中,只要findAll即可 -
省會城市
表格中的前兩個tr應(yīng)該用th做標(biāo)題的,所以從第三個tr就是省會城市的溫度信息了 -
數(shù)據(jù)獲取
省會城市名稱、最高溫度、最低溫度 分別在1、4、7的td中,findALL后,這么規(guī)律的排序直接使用列表切片[1:8:3]即可獲取
數(shù)據(jù)匯總分析
剛才分析了西北地區(qū)的數(shù)據(jù)獲取,然后再看看西南。
西北地域的數(shù)據(jù)url為:
http://www.weather.com.cn/textFC/xb.shtml
再看看西南地域的url:
http://www.weather.com.cn/textFC/xn.shtml
簡直不要太歡樂,url只有最后的地域拼音頭不一樣,可以開啟for循環(huán)模式了!
遍歷7個地域,然后獲取每個地域下的省會城市,最終保存到一個列表中,樣式大致如下
數(shù)據(jù)展示
數(shù)據(jù)趴好了,返回一串?dāng)?shù)組?這怎么符合處女座追求完美的行事風(fēng)格!
python繪圖的模塊很多,多數(shù)人都用
Matplotlib
,但是…
渣男錫紙燙,渣女大波浪,而我不一樣,積極又向上。
所以不一樣的我使用pyecharts….
今天用pyecharts繪圖,讓大家看看python集成echarts后的繪圖效果如何。
代碼實現(xiàn)
模塊準(zhǔn)備
如果你是首次使用爬蟲和echarts繪圖,需要關(guān)注一下模塊的安裝:
pip install requests
install beautifulsoup4
pip install lxml # bs4的解析依賴庫
pip install pyecharts
關(guān)于pyecharts的更新
網(wǎng)上鋪天蓋地的
pycharts
都是來回轉(zhuǎn)來轉(zhuǎn)去的0.3.x、0.5.x的版本
pyecharts 19年4月份已經(jīng)更新到1.1.0了,其中不管是模塊導(dǎo)入還是插件的使用,變更都比較大。
所以網(wǎng)上的那列介紹,如果是python3.6+你就別看了,不適合你,連代碼引入都會報錯。
有人說可以指定舊版本啊,可既然出了新版本,你又何必杠精的去學(xué)習(xí)舊的版本?
看看pyecharts的github:https://github.com/pyecharts/pyechart
網(wǎng)站底部有專門的中、英文文檔,喜歡的朋友可以去仔細瞧瞧…
代碼實現(xiàn)
# -*- coding: utf-8 -*-
# @Author : 王翔
# @JianShu : 清風(fēng)Python
# @Date : 2019/8/15 21:39
# @Software : PyCharm
# @version :Python 3.7.3
# @File : TempComparison.py
import requests
from bs4 import BeautifulSoup
from pyecharts.charts import Line
import datetime
class TempComparison:
def __init__(self):
self.cityInfoList = []
def get_request(self):
areas_list = ['hb', 'db', 'hd', 'hz', 'hn', 'xb', 'xn']
headers = {
'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/70.0.3538.67 Safari/537.36',
'Referer': 'http://www.weather.com.cn/textFC/xn.shtml'
}
for area in areas_list:
req = requests.get("http://www.weather.com.cn/textFC/%s.shtml" % area,
headers=headers)
content = req.content.decode('utf-8')
soup = BeautifulSoup(content, 'lxml')
for line in soup.findAll('div', {'class': 'conMidtab'})[1].findAll('div', {'class': 'conMidtab2'}):
td_list = line.findAll('tr')[2].findAll('td')[1:8:3]
self.cityInfoList.append(list(map(lambda x: x.text.strip(), td_list)))
print(self.cityInfoList)
def filter_result(self):
top_city_info = sorted(self.cityInfoList, key=lambda x: x[1], reverse=True)[:10]
city, high_temp, low_temp = list(zip(*top_city_info))
now = datetime.datetime.now()
tommorrow = (now + datetime.timedelta(days=1)).strftime("%Y-%m-%d")
charts_bar = (
Line()
.set_global_opts(
title_opts={"text": "省會城市溫度Top10 清風(fēng)Python",
"subtext": tommorrow})
.add_xaxis(city)
.add_yaxis("高溫", high_temp, color='#C3322D') # is_symbol_show=True, is_smooth=True,
.add_yaxis("低溫", low_temp, color='#399EFF')
)
charts_bar.render('TempComparison.html')
if __name__ == '__main__':
main = TempComparison()
main.get_request()
main.filter_result()
代碼執(zhí)行完成后,會生成一個
TempComparison.html
的文件
效果展示:
The End
OK,今天的內(nèi)容就到這里,如果覺得內(nèi)容對你有所幫助,歡迎點擊文章右下角的“
在看
”。
期待你關(guān)注我的公眾號
清風(fēng)Python
,如果覺得不錯,希望能動動手指轉(zhuǎn)發(fā)給你身邊的朋友們。
作者:
清風(fēng)Python
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
