• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

经过前面静态页面的爬取已经收集到很多信息了。最近在看怎么从动态页面上爬取信息,主要用到的还是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)  

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap