1. 程式人生 > >Python3爬蟲小程式——爬取各類天氣資訊(3)

Python3爬蟲小程式——爬取各類天氣資訊(3)

經過前面靜態頁面的爬取已經收集到很多資訊了。最近在看怎麼從動態頁面上爬取資訊,主要用到的還是selenium+phantomJS工具(如何安裝?點選這裡檢視),雖然存在一些缺點(效率不是很高),但是還算不錯。

於是乎,前面從天氣網(http://www.tianqi.com/)上爬資訊的我,轉到了中國天氣網(http://www.weather.com.cn/)。

但是目前爬取資料存在一定問題,這裡我用的是使用xpath去定位(因為xpath定位會比較準確),開啟頁面,按F12找到對應的資訊,就可以右擊,然後選擇Copy-Copy XPath。感覺很好找到,可是執行就出問題。。。

例如:北京的相對溼度對應的xpath是://*[@id="today"]/div[2]/div/div[2]。

因為沒有尾號限行這一塊,所以石家莊的是://*[@id="today"]/div[2]/div/div[1]。


北京的頁面


石家莊的頁面

可以明顯看出,最後兩個div是不同的。。。=.=|||然後用classname吧還找不到。。。現在還在看看看。。。

可以加入一定的if判斷來區分這兩個不一樣的地方,繼續試試。。

程式碼:

#coding=utf-8
from selenium import webdriver
import time
#構造資料,城市分別是北京、天津、石家莊、太原、濟南、瀋陽、呼和浩特、鄭州
city_id=['101010100','101030100','101090101','101100101','101120101','101070101','101080101','101180101']
def getcityid(city):
    if city=='beijing':
        return city_id[0]
    elif city=='tianjin':
        return city_id[1]
    elif city=='shijiazhuang':
        return city_id[2]
    elif city=='taiyuan':
        return city_id[3]
    elif city=='jinan':
        return city_id[4]
    elif city=='shenyang':
        return city_id[5]
    elif city=='huhehaote':
        return city_id[6]
    else:
        return city_id[7]
#獲取天氣情況資料
def getweather(city):
    try:
        browser=webdriver.PhantomJS()
        print("城市:"+city)
        #構造url
        url="http://www.weather.com.cn/weather1d/"+getcityid(city)+".shtml"
        browser.get(url)
        browser.implicitly_wait(10)
        #構造列表
        weatherlist=[]
        #獲取當前系統時間
        datetime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        weatherlist.append(str(datetime))
        #獲取天氣情況
        weaElement=browser.find_element_by_xpath('//*[@id="today"]/div[2]/ul/li[1]/p[1]')
        weatherlist.append(str(weaElement.text))
        #獲取溫度情況
        tempElement=browser.find_element_by_xpath('//*[@id="today"]/div[2]/div/div[4]/span')
        weatherlist.append(str(tempElement.text))
        #獲取風向
        windElement=browser.find_element_by_xpath('//*[@id="today"]/div[2]/div/div[3]/span')
        weatherlist.append(str(windElement.text))
        # 獲取風速
        windspeedElement = browser.find_element_by_xpath('//*[@id="today"]/div[2]/div/div[3]/em')
        weatherlist.append(str(windspeedElement.text))
        #獲取溼度
        wetElement = browser.find_element_by_xpath('//*[@id="today"]/div[2]/div/div[2]/em')
        weatherlist.append(str(wetElement.text))
        print("系統時間、天氣情況、溫度、風向、風速、溼度")
        print(weatherlist)
    except Exception as e:
        print("獲取天氣資料出現異常!將在一分鐘之後重試……")
        print("Exception:"+str(e))
        time.sleep(60)
        getweather(city)

#主函式
while(True):
    getweather("beijing")
    getweather("tianjin")
    getweather("shijiazhuang")
    getweather("taiyuan")
    getweather("jinan")
    getweather("shenyang")
    getweather("huhehaote")
    getweather("zhengzhou")
    #休息一小時
    time.sleep(3600)