经过前面静态页面的爬取已经收集到很多信息了。最近在看怎么从动态页面上爬取信息,主要用到的还是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判断来区分这两个不一样的地方,继续试试。。
代码:
-
- 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="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)