爬蟲獲取天氣歷史按月份存爲txt文件

#\usr\bin\python
#-*coding:UTF-8-*-
def ModSearchWeather(City,Date):  #定義一個對象:獲取天氣歷史信息
  import re,requests,sys  #引用re,requests,sys等相應庫
  #獲取網頁數據
  FilePath=sys.path[0]+'/'+City+'('+Date+').txt'  #定義FilePath爲輸出txt文件路徑
  url='http://www.tianqihoubao.com/lishi/'+City+'/month/'+Date+'.html' #定義url爲獲取天氣歷史數據的網址
  xml=requests.get(url).text  #定義xml爲獲取網頁數據
  xml=xml.replace('  ','').replace('   ','').replace('\n','')  #用replace方法初步處理不必要的空格和換行符
  reObj=re.compile(u'<td>(.*?)</td>')  #運用正則表達式獲取<td></td>中的表格內容
  textlist=reObj.findall(xml)  #將獲取到的表格內容賦值給textlist
  #進一步處理所獲得的數據內容
  if len(textlist)>1:  #判斷是否獲得了數據
    #如是:獲得數據
    FileName=open(FilePath,'w')  #新建一個txt文件,如當前文件夾中存在,則直接覆蓋
    FileName.write('')  #清空txt文件中內容,主要針對已存在的txt文件
    for i in range(len(textlist)): #設置循環,直到所獲數據的最後一位
      if (i+1)%4==0: #設置規則:隔4個內容獲取輸出一次,這裏是爲了配合網站表格中的每一行
        text=textlist[i-3:i+1]  #輸出列表內容到text
        textinfo=''  #定義textinfo來存放臨時處理好的數據
        textOut=''  #定義textOut來存放處理好的數據,並用於輸出
        for j in range(4):  #設置循環,4位
          textinfo=text[j].replace('\r','').replace(' ','')\
                    .replace('<b>','').replace('</b>','')  #將所獲取的數據一一處理,去除\r,<b>,<\b>和空格等無關的內容
          if len(textinfo)>30:  #判斷處理完的數據字符串是否大於30,因爲大於30位的字符串爲包含鏈接的日期,輸出時僅保留日期即可
            #如是:字符串大於30
            textinfo=textinfo[textinfo.find('>')+1:len(textinfo)-4]  #用find方法來截取字符串,輸出日期
          else:
            #如不是:字符串小於30
            textinfo=textinfo  #直接輸出內容
          textOut=textOut + ',' + textinfo  #將處理好的數據按照',A,B,C,D'等方式輸出
  ##      print textOut.replace(',','',1)
        FileName=open(FilePath,'a')  #在追加模式(a)模式下將內容輸入到txt文件中
        FileName.write(textOut.replace(',','',1).encode('utf-8')+'\n')  #刪除多餘的',',按照'A,B,C,D'的格式輸入到txt文件中,行與行之間進行換行處理
        FileName.close()  #關閉txt文件
    return '\n'+City+'('+Date+')' + 'Search Successful\n'+\
          '----------------------------------------------\n'  #執行完畢後顯示輸出成功提示
  else:
    #如不是:沒有獲得數據
    return '\n'+City+'('+Date+')' + 'Search Fails\n'+\
          '----------------------------------------------\n'  #執行完畢後顯示輸出失敗提示
  
def InputInfo():  #定義一個對象:用於輸入信息
  City=raw_input('Please Enter Chinese City English Name: ')  #定義City爲輸入的城市名稱
  Date=raw_input('Please Enter Search Date(YYYYMM) Or Year(YYYY): ')  #定義Date爲輸入的獲取日期
  if len(Date)==6:  #判斷輸入日期的字符串長度
    #如等於6,則爲按月獲取天氣歷史信息
    print ModSearchWeather(City,Date)  #執行獲取天氣歷史信息函數
  elif len(Date)==4:
    #如等於4,則爲按年獲取天氣歷史信息
    for i in range(1,13):  #設置循環,從1到12月獲取每月天氣信息,並輸出到txt文件中
      print ModSearchWeather(City,Date+str(i).zfill(2))  #執行獲取天氣歷史信息函數
  print InputInfo()  #執行完畢後再次進入輸入信息界面
  
print InputInfo()  #進入輸入信息界面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章