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]。

Python3爬虫小程序——爬取各类天气信息(3)_第1张图片

北京的页面

Python3爬虫小程序——爬取各类天气信息(3)_第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)

 

 

 

 

 

你可能感兴趣的:(爬虫)