zoukankan      html  css  js  c++  java
  • 2020中国高校计算机大赛 华为云大数据挑战赛--热身赛--爬取天气数据

    热身赛中有这样的提示:

    小提示:如果不考虑天气、周边活动、节假日等因素,预测结果可能不准确哦。

    于是就查了查怎么爬取比赛中所需的天气信息。其实针对数据量不大的数据,可以尝试手动填写特征,由于热身赛给出的数据只有28天的数据,其实是可以手动添加的

    但是数据量一多,如果是给一年的数据,手动添加是不太可能的。

    下面变记录一下爬虫的过程。

    一、 安装库

      python 中先安装 request 和 bs4 

    二、需要爬取网页  

      热身赛需要爬去的是深圳1、2月信息

      这两个网址分别记录了深圳1、2月的天气信息 

      http://lishi.tianqi.com/shenzhen/201901.html

      http://lishi.tianqi.com/shenzhen/201902.html 

    urls = [ "http://lishi.tianqi.com/shenzhen/201901.html",
              "http://lishi.tianqi.com/shenzhen/201902.html"]

    三、创建文件存储信息

      

    files = open('shenzhen_weathe.csv','w')

    四、建立连接

      连接之前需要修改request中的用户名。原始用户名会直接告诉web服务器访问的是python,于是会被拒绝访问  

    kv = {'user-agent':'Mozilla/5.0'} 

      建立连接  

    response = requests.get(url,headers=kv)
    soup = BeautifulSoup(response.text,'html.parser')

      此时soup中就是爬去的网站信息了。实际上soup就是获取了这个网站的html,像这个网站把数据都写在了html文件里,所以就可以直接分析了。

      可以看到,所有天气信息都是在<ul class="thrui">中,而每一天的天气信息都在 li 标签中的div中

      

      所以通过循环处理就可以获得信息  

    weather_list = soup.select('ul[class="thrui"]')
    
        for weather in weather_list:
            li_list = weather.select('li')
    
            for li in li_list:
                div_items = li.select('div')
                str = ""
                for div in div_items:
                    str += div.string+','
    
                files.write(str+'
    ')

    五、整体代码+效果

      

    import requests
    from bs4 import BeautifulSoup
    
    urls = [ "http://lishi.tianqi.com/shenzhen/201901.html",
              "http://lishi.tianqi.com/shenzhen/201902.html"]
    
    files = open('shenzhen_weathe.csv','w')
    
    kv = {'user-agent':'Mozilla/5.0'}  #更换用户信息,变成浏览器模式
    
    for url in urls:
        response = requests.get(url,headers=kv)
        soup = BeautifulSoup(response.text,'html.parser')
        weather_list = soup.select('ul[class="thrui"]')
    
        for weather in weather_list:
            li_list = weather.select('li')
    
            for li in li_list:
                div_items = li.select('div')
                str = ""
                for div in div_items:
                    str += div.string+','
    
                files.write(str+'
    ')
    
    files.close()

      效果如下:

     

     

  • 相关阅读:
    [WPF]Win10便签软件
    [WPF]使用Fody提高效率
    [WPF]限制程序单例运行
    [WPF]创建系统栏小图标
    Run Performance Testing Which Was Distributed To Multiple Test Agents
    FxZ,C#开发职位面试测试题(30分钟内必须完成)
    BYS推荐MS前端PhoneCall面试问题整理-2
    BYS推荐MS前端PhoneCall面试问题整理-1
    LxNx前端F2F面试问题整理
    复杂DIV交错布局
  • 原文地址:https://www.cnblogs.com/xieviki650/p/12952111.html
Copyright © 2011-2022 走看看