Python3爬虫小程序——爬取各类天气信息

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

代码:

[python]  view plain  copy
  1. #coding=utf-8  
  2. from selenium import webdriver  
  3. import time  
  4. #构造数据,城市分别是北京、天津、石家庄、太原、济南、沈阳、呼和浩特、郑州  
  5. city_id=['101010100','101030100','101090101','101100101','101120101','101070101','101080101','101180101']  
  6. def getcityid(city):  
  7.     if city=='beijing':  
  8.         return city_id[0]  
  9.     elif city=='tianjin':  
  10.         return city_id[1]  
  11.     elif city=='shijiazhuang':  
  12.         return city_id[2]  
  13.     elif city=='taiyuan':  
  14.         return city_id[3]  
  15.     elif city=='jinan':  
  16.         return city_id[4]  
  17.     elif city=='shenyang':  
  18.         return city_id[5]  
  19.     elif city=='huhehaote':  
  20.         return city_id[6]  
  21.     else:  
  22.         return city_id[7]  
  23. #获取天气情况数据  
  24. def getweather(city):  
  25.     try:  
  26.         browser=webdriver.PhantomJS()  
  27.         print("城市:"+city)  
  28.         #构造url  
  29.         url="http://www.weather.com.cn/weather1d/"+getcityid(city)+".shtml"  
  30.         browser.get(url)  
  31.         browser.implicitly_wait(10)  
  32.         #构造列表  
  33.         weatherlist=[]  
  34.         #获取当前系统时间  
  35.         datetime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))  
  36.         weatherlist.append(str(datetime))  
  37.         #获取天气情况  
  38.         weaElement=browser.find_element_by_xpath('//*[@id="today"]/div[2]/ul/li[1]/p[1]')  
  39.         weatherlist.append(str(weaElement.text))  
  40.         #获取温度情况  
  41.         tempElement=browser.find_element_by_xpath('//*[@id="today"]/div[2]/div/div[4]/span')  
  42.         weatherlist.append(str(tempElement.text))  
  43.         #获取风向  
  44.         windElement=browser.find_element_by_xpath('//*[@id="today"]/div[2]/div/div[3]/span')  
  45.         weatherlist.append(str(windElement.text))  
  46.         # 获取风速  
  47.         windspeedElement = browser.find_element_by_xpath('//*[@id="today"]/div[2]/div/div[3]/em')  
  48.         weatherlist.append(str(windspeedElement.text))  
  49.         #获取湿度  
  50.         wetElement = browser.find_element_by_xpath('//*[@id="today"]/div[2]/div/div[2]/em')  
  51.         weatherlist.append(str(wetElement.text))  
  52.         print("系统时间、天气情况、温度、风向、风速、湿度")  
  53.         print(weatherlist)  
  54.     except Exception as e:  
  55.         print("获取天气数据出现异常!将在一分钟之后重试……")  
  56.         print("Exception:"+str(e))  
  57.         time.sleep(60)  
  58.         getweather(city)  
  59.   
  60. #主函数  
  61. while(True):  
  62.     getweather("beijing")  
  63.     getweather("tianjin")  
  64.     getweather("shijiazhuang")  
  65.     getweather("taiyuan")  
  66.     getweather("jinan")  
  67.     getweather("shenyang")  
  68.     getweather("huhehaote")  
  69.     getweather("zhengzhou")  
  70.     #休息一小时  
  71.     time.sleep(3600)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值