Flask全國氣象數(shù)據(jù)采集及可視化系統(tǒng)(爬蟲)Python源碼下載

Flask全國氣象數(shù)據(jù)采集及可視化系統(tǒng)(爬蟲)Python源碼下載


一拒贱、項(xiàng)目前置條件

①具備 python 環(huán)境,并且可以通過 pip 進(jìn)行安裝項(xiàng)目

②具備 Pycram 工具崔梗,推薦專業(yè)版

③具備 Mysql 數(shù)據(jù)庫

④具備 Navicat 數(shù)據(jù)庫可視化管理工具

⑤推薦使用 Google Chrome夜只、Firefox 瀏覽器

項(xiàng)目簡介

項(xiàng)目通過爬取中國天氣網(wǎng)的各個(gè)城市數(shù)據(jù),然后保存到自己的數(shù)據(jù)庫蒜魄,然后

通過python 以及echart 技術(shù)對這些數(shù)據(jù)進(jìn)行初步分析以及可視化扔亥。項(xiàng)目采用B/S

架構(gòu),通過瀏覽器即可訪問谈为。完善版本實(shí)現(xiàn)了所有可視化與后臺(tái)數(shù)據(jù)進(jìn)行關(guān)聯(lián)旅挤,

并且爬蟲也進(jìn)行了優(yōu)化處理。

項(xiàng)目技術(shù)

python 爬蟲技術(shù)伞鲫、Flask 后端框架粘茄、python、mysql 數(shù)據(jù)庫秕脓、echart 大數(shù)據(jù)可

視化柒瓣、layui 后臺(tái)管理前端框架。

項(xiàng)目功能

系統(tǒng)擁有五大功能模塊吠架,應(yīng)付各種設(shè)計(jì)場景芙贫,其中有可視化功能模塊、版本管理

功能模塊诵肛、用戶管理功能模塊屹培、實(shí)時(shí)氣象數(shù)據(jù)管理功能模塊、爬蟲管理功能模

怔檩。同時(shí)我們針對管理員和普通用戶有著不同菜單權(quán)限的控制

爬蟲簡述

自動(dòng)爬蟲:項(xiàng)目啟動(dòng)褪秀,定時(shí)間隔1 小時(shí)爬取一次數(shù)據(jù)(可以自定義修改)。如下圖薛训。

項(xiàng)目手動(dòng)啟動(dòng)爬蟲:通過后臺(tái)控制臺(tái)媒吗,點(diǎn)擊啟動(dòng)爬蟲,后臺(tái)靜默爬取實(shí)時(shí)天氣數(shù)據(jù)乙埃,智能跳

過已經(jīng)獲取到的數(shù)據(jù)闸英。

python?文件手動(dòng)啟動(dòng)爬蟲:手動(dòng)運(yùn)行python 文件锯岖,獲取最新天氣數(shù)據(jù)。



flask

flask_apscheduler

pymysql

requests

xlwt

selenium



Navicat軟件將weathers數(shù)據(jù)庫文件導(dǎo)入

pytcharm打開項(xiàng)目甫何,配置Python環(huán)境(安裝need文件的依賴包)

運(yùn)行app.py文件啟動(dòng)項(xiàng)目

賬號? admin? 密碼123456


爬取的網(wǎng)站(天氣網(wǎng))http://www.weather.com.cn/

管理員賬號admin ??密碼123456

依賴的Python包:

flask

flask_apscheduler

pymysql

requests

xlwt

Selenium









爬蟲核心代碼:


class GetWeather:

def __init__(self):

self.baseUrl = r"http://d1.weather.com.cn/sk_2d/"

self.headers = {'Accept': "*/*",

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'keep-alive',

'Connection': '',

'Cookie': 'f_city=北京|101010100|; Hm_lvt_080dabacb001ad3dc8b9b9049b36d43b=1637305568,1637734650,1639644011,1639710627; Hm_lpvt_080dabacb001ad3dc8b9b9049b36d43b=1639723697'.encode(

"utf-8").decode("latin1"),

'Host': 'd1.weather.com.cn',

'Referer': 'http://www.weather.com.cn/',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36', }

self.loadList = []

self.cityList = [] ?# 格式為:列表里面的子列表都是一個(gè)省份的所有城市出吹,子列表里所有元素都是字典,每個(gè)字典有兩項(xiàng)

self.cityDict = {}

self.result = xlwt.Workbook(encoding='utf-8', style_compression=0)

self.sheet = self.result.add_sheet('result', cell_overwrite_ok=True)

self.cityRow = 0

self.totalGet = 0


current_path = os.path.dirname(__file__)

with open(current_path + "/CITY.txt", 'r', encoding='UTF-8') as load_f:

loadList = json.load(load_f) ?# 34個(gè)省份

for i in range(0, 4):

self.cityList.append(loadList[i])

for i in range(4, 34):

for j in loadList[i]['cityList']:

self.cityList.append(j)

for i in self.cityList:

if 'districtList' in i.keys():

self.cityDict.setdefault(i['cityName'], i['cityId'] + "01") ?# 省

else:

self.cityDict.setdefault(i['provinceName'], i['id'] + "0100") ?# 直轄市

print(len(self.cityDict))


def __getWeatherInfo__(self):

db = dbUtil()

count = 0

for city, id in self.cityDict.items():

try:

self.totalGet = self.totalGet + 1

self.sheet.write(self.cityRow, 0, city) ?# 寫當(dāng)前城市名

PageUrl = self.baseUrl + id + ".html?_" + str(int(time.time() * 1000))

response = requests.get(PageUrl, headers=self.headers, allow_redirects=False)

response.encoding = "utf-8"

self.htmlResult = response.text

data = json.loads(self.htmlResult.replace("var dataSK=", ""))

nameen = data["nameen"] ?# 城市拼音

cityname = data["cityname"] ?# 城市名稱

temp = data["temp"] ?# 當(dāng)前溫度

WD = data["WD"] ?# 風(fēng)向

WS = data["WS"].replace("級", "") ?# 風(fēng)力

wse = data["wse"].replace("km/h", "") ?# 風(fēng)速

sd = data["sd"].replace("%", "") ?# 濕度

weather = data["weather"] ?# 天氣

record_date = data["date"] ?# 時(shí)間

record_time = data["time"] ?# 時(shí)分

aqi = data["aqi"] ?# 時(shí)分

judge_sql = "select count(id) from `weather` where nameen = '" + nameen + "' and cityname='" + cityname + "' and record_date='" + record_date + "' and record_time='" + record_time + "'";

sql = "INSERT INTO `weather` VALUES (null, '" + nameen + "', '" + cityname + "', '" + record_date + "', '" + record_time + "', " + str(

temp) + ", '" + WD + "', " + WS + ", " + wse + ", " + sd + ", '" + weather + "', " + aqi + ", '" + time.strftime(

"%Y-%m-%d %H:%M:%S", time.localtime()) + "',0);"

i = db.query_noargs(judge_sql)[0][0]

if int(i) > 0:

print("跳過:", judge_sql)

continue

update_sql = "update `weather` set is_old=1 where nameen = '" + nameen + "' and cityname='" + cityname + "'";

print("插入:", sql)

count += 1

db.query_noargs(update_sql)

db.query_noargs(sql)

except Exception as e:

print(e)

continue

t = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

sql = "insert into slog VALUES (NULL, \"【爬蟲啟動(dòng)】爬取數(shù)據(jù)全國天氣數(shù)據(jù)運(yùn)行成功,獲取數(shù)據(jù):" + str(count) + "條\",\"" + t + "\")"

db.query_noargs(sql)

db.close_commit()


def __main__(self):

print(datetime.datetime.now())

self.__getWeatherInfo__()

print(datetime.datetime.now())



# 后臺(tái)調(diào)用爬蟲

def online():

weather = GetWeather()

weather.__main__()

return 200

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辙喂,一起剝皮案震驚了整個(gè)濱河市捶牢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巍耗,老刑警劉巖秋麸,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異炬太,居然都是意外死亡灸蟆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門亲族,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炒考,“玉大人,你說我怎么就攤上這事孽水∑毖” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵女气,是天一觀的道長杏慰。 經(jīng)常有香客問我,道長炼鞠,這世上最難降的妖魔是什么缘滥? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮谒主,結(jié)果婚禮上朝扼,老公的妹妹穿的比我還像新娘。我一直安慰自己霎肯,他們只是感情好擎颖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著观游,像睡著了一般搂捧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上懂缕,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天允跑,我揣著相機(jī)與錄音,去河邊找鬼。 笑死聋丝,一個(gè)胖子當(dāng)著我的面吹牛索烹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弱睦,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼百姓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了每篷?” 一聲冷哼從身側(cè)響起瓣戚,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎焦读,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舱权,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矗晃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宴倍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片张症。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸵贬,靈堂內(nèi)的尸體忽然破棺而出俗他,到底是詐尸還是另有隱情,我是刑警寧澤阔逼,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布兆衅,位于F島的核電站,受9級特大地震影響嗜浮,放射性物質(zhì)發(fā)生泄漏羡亩。R本人自食惡果不足惜危融,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一畏铆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吉殃,春花似錦辞居、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迫卢,卻和暖如春倚搬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乾蛤。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工每界, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捅僵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓眨层,卻偏偏與公主長得像庙楚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子趴樱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容