Python3爬蟲小程式——爬取各類天氣資訊(3)
阿新 • • 發佈:2019-01-06
經過前面靜態頁面的爬取已經收集到很多資訊了。最近在看怎麼從動態頁面上爬取資訊,主要用到的還是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]。
北京的頁面
石家莊的頁面
可以明顯看出,最後兩個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)