国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python3爬取各類天氣信息

2020-02-22 23:18:41
字體:
供稿:網(wǎng)友

本來是想從網(wǎng)上找找有沒有現(xiàn)成的爬取空氣質(zhì)量狀況和天氣情況的爬蟲程序,結(jié)果找了一會兒感覺還是自己寫一個吧。

主要是爬取北京包括北京周邊省會城市的空氣質(zhì)量數(shù)據(jù)和天氣數(shù)據(jù)。

過程中出現(xiàn)了一個錯誤:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 250。

原來發(fā)現(xiàn)是頁面的編碼是gbk,把語句改成data=urllib.request.urlopen(url).read().decode("gbk")就可以了。

然后我把爬到的數(shù)據(jù)寫到文本文檔里了,往后可以導(dǎo)入到excel表中使用。

實(shí)驗(yàn)室的電腦不經(jīng)常開,然后就放到服務(wù)器上了,讓它自己慢慢一小時爬一次吧~哈哈哈~

后面有一次晚上出現(xiàn)了異常,因?yàn)闆]加入異常處理,所以從零點(diǎn)到早上五點(diǎn)的數(shù)據(jù)都沒爬到。。。

(⊙﹏⊙)然后這次修改就加入了異常處理。如果出現(xiàn)URLError,就一分鐘后重試。

代碼:

#coding=utf-8 #北京及周邊省會城市污染數(shù)據(jù)、天氣數(shù)據(jù)每小時監(jiān)測值爬蟲程序 import urllib.request import re import urllib.error import time #模擬成瀏覽器 headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36") opener = urllib.request.build_opener() opener.addheaders=[headers] #將opener安裝為全局 urllib.request.install_opener(opener) def get_pm25_and_weather(city):  #首先執(zhí)行獲取空氣質(zhì)量數(shù)據(jù),返回?cái)?shù)據(jù)更新時間  data_time=getpm25(city)  #然后將獲取到的數(shù)據(jù)更新時間賦值給獲取天氣數(shù)據(jù)函數(shù)使用  getweather(city,data_time) def getpm25(city):  try:  #設(shè)置url地址  url="http://pm25.in/"+city  data=urllib.request.urlopen(url).read().decode("utf-8")  print("城市:"+city)  #構(gòu)建數(shù)據(jù)更新時間的表達(dá)式  data_time='<div class="live_data_time">/s{1,}<p>數(shù)據(jù)更新時間:(.*?)</p>'  #尋找出數(shù)據(jù)更新時間  datatime=re.compile(data_time, re.S).findall(data)  print("數(shù)據(jù)更新時間:"+datatime[0])  #構(gòu)建數(shù)據(jù)收集的表達(dá)式  data_pm25 = '<div class="span1">/s{1,}<div class="value">/n/s{1,}(.*?)/s{1,}</div>'  data_o3='<div class="span1">/s{1,}<div class ="value">/n/s{1,}(.*?)/s{1,}</div>'  #尋找出所有的監(jiān)測值  pm25list = re.compile(data_pm25, re.S).findall(data)  o3list=re.compile(data_o3, re.S).findall(data)  #將臭氧每小時的值插入到原列表中  pm25list.append(o3list[0])  print("AQI指數(shù),PM2.5,PM10,CO,NO2,SO2,O3:(單位:μg/m3,CO為mg/m3)")  print(pm25list)  #將獲取到的值寫入文件中  writefiles_pm25(city,datatime,pm25list)  #返回?cái)?shù)據(jù)更新時間值  return datatime  except urllib.error.URLError as e:  print("出現(xiàn)URLERROR!一分鐘后重試……")  if hasattr(e,"code"):   print(e.code)  if hasattr(e,"reason"):   print(e.reason)  time.sleep(60)  #出現(xiàn)異常則過一段時間重新執(zhí)行此部分  getpm25(city)  except Exception as e:  print("出現(xiàn)EXCEPTION!十秒鐘后重試……")  print("Exception:"+str(e))  time.sleep(10)  # 出現(xiàn)異常則過一段時間重新執(zhí)行此部分  getpm25(city) def writefiles_pm25(filename,datatime,pm25list):  #將獲取的數(shù)據(jù)寫入文件中,數(shù)據(jù)分別為時間,AQI指數(shù),PM2.5,PM10,CO,NO2,SO2,O3。(單位:μg/m3,CO為mg/m3)  f = open("D:/Python/Python35/myweb/data_pm25/data_pm25_"+filename+".txt", "a")  f.write(datatime[0])  f.write(",")  for pm25 in pm25list:  f.write(str(pm25))  f.write(",")  f.write("/n")  print("該條空氣質(zhì)量數(shù)據(jù)已添加到文件中!")  f.close() def getweather(city,datatime):  try:  #構(gòu)建url  url="http://"+city+".tianqi.com/"  data=urllib.request.urlopen(url).read().decode("gbk")  #構(gòu)建數(shù)據(jù)收集的表達(dá)式  data_weather = '<li class="cDRed">(.*?)</li>'  data_wind='<li style="height:18px;overflow:hidden">(.*?)</li>'  data_temperature='<div id="rettemp"><strong>(.*?)°'  data_humidity='</strong><span>相對濕度:(.*?)</span>'  #尋找出所有的監(jiān)測值  weatherlist = re.compile(data_weather, re.S).findall(data)  windlist=re.compile(data_wind, re.S).findall(data)  temperaturelist = re.compile(data_temperature, re.S).findall(data)  humiditylist = re.compile(data_humidity, re.S).findall(data)  #將其他值插入到天氣列表中  weatherlist.append(windlist[0])  weatherlist.append(temperaturelist[0])  weatherlist.append(humiditylist[0])  print("天氣狀況,風(fēng)向風(fēng)速,實(shí)時溫度,相對濕度:")  print(weatherlist)  #將獲取到的值寫入文件中  writefiles_weather(city,datatime,weatherlist)  except urllib.error.URLError as e:  print("出現(xiàn)URLERROR!一分鐘后重試……")  if hasattr(e,"code"):   print(e.code)  if hasattr(e,"reason"):   print(e.reason)  time.sleep(60)  # 出現(xiàn)異常則過一段時間重新執(zhí)行此部分  getweather(city,datatime)  except Exception as e:  print("出現(xiàn)EXCEPTION!十秒鐘后重試……")  print("Exception:"+str(e))  time.sleep(10)  # 出現(xiàn)異常則過一段時間重新執(zhí)行此部分  getweather(city, datatime) def writefiles_weather(filename,datatime,weatherlist):  #將獲取的數(shù)據(jù)寫入文件中,數(shù)據(jù)分別為時間,天氣狀況,風(fēng)向風(fēng)速,實(shí)時溫度,相對濕度。  f = open("D:/Python/Python35/myweb/data_weather/data_weather_"+filename+".txt", "a")  f.write(datatime[0])  f.write(",")  for weather in weatherlist:  f.write(str(weather))  f.write(",")  f.write("/n")  print("該條天氣數(shù)據(jù)已添加到文件中!")  f.close() #退出循環(huán)可用Ctrl+C鍵 while True:  print("開始工作!")  get_pm25_and_weather("beijing")  get_pm25_and_weather("tianjin")  get_pm25_and_weather("shijiazhuang")  get_pm25_and_weather("taiyuan")  get_pm25_and_weather("jinan")  get_pm25_and_weather("shenyang")  get_pm25_and_weather("huhehaote")  get_pm25_and_weather("zhengzhou")  #每一小時執(zhí)行一次  print("休息中……")  print("/n")  time.sleep(3600)             
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 左贡县| 惠来县| 潮州市| 印江| 霍林郭勒市| 周宁县| 射阳县| 彭山县| 连南| 蚌埠市| 方山县| 余江县| 土默特右旗| 从化市| 徐州市| 隆尧县| 敖汉旗| 凤翔县| 华坪县| 义乌市| 四会市| 芜湖县| 迁安市| 潍坊市| 百色市| 安乡县| 蓬溪县| 镇巴县| 什邡市| 万山特区| 锡林浩特市| 资阳市| 惠安县| 东乡县| 湟源县| 铅山县| 兰考县| 朝阳县| 文成县| 巩义市| 渑池县|