热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于如何只用python获取网页天气(数据)的方法

获取网页数据无非就三步!第一步:首先通过python获取到前端html完整代码!(需要用到request模块)第二步:通过获取到的html代码进行过滤,获取到有用天气数据(需要用到bs4模块

获取网页数据无非就三步!

第一步:首先通过python获取到前端html完整代码!(需要用到request模块)

第二步:通过获取到的html代码进行过滤,获取到有用天气数据 (需要用到bs4模块下的BeautifulSoup)

第三步:获取到的天气数据,进行本地化保存

PS:其它用到的模块:time、random、socket、csv、http.client

废话不多说,直接上代码!

首先,导入引用模块

from bs4 import BeautifulSoup
import requests, time, random, socket, csv
import http.client

 

第一步:首先通过python获取到前端html完整代码!(需要用到request模块)

# 获取请求网址的完整HTML代码
def htmlcontent(url, data=None):
    header = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, sdch',
        'Accept-Language': 'zh-CN,zh;q=0.8',
        'Connection': 'keep-alive',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'
    }   # request 的请求头
    timeout = random.choice(range(80, 180))
    while True:
        try:
            rep = requests.get(url, headers=header, timeout=timeout)   # 请求url地址,获得返回response信息
            rep.encoding = 'utf-8'
            break
        except socket.timeout as e:
            print('3:', e)
            time.sleep(random.choice(range(8, 15)))

        except socket.error as e:
            print('4:', e)
            time.sleep(random.choice(range(20, 60)))

        except http.client.BadStatusLine as e:
            print('5:', e)
            time.sleep(random.choice(range(30, 80)))

        except http.client.IncompleteRead as e:
            print('6:', e)
            time.sleep(random.choice(range(5, 15)))
    return rep.text   # 返回的Html全部代码
第一步

第二步:通过获取到的html代码进行过滤,获取到有用天气数据 (需要用到bs4模块下的BeautifulSoup)

# 过滤筛选有用数据
def weatherdata(html_text):
    data_al = []
    bs = BeautifulSoup(html_text, "html.parser")   # 创建BeautifulSoup对象并以html.parser方式解析
    li = bs.body.find('div', {'id': '7d'}).find('ul').find_all('li')   # 根据前端HTML代码的标签获取具体天气数据

    for data in li:
        temp = []
        date = data.find('h1').string
        inf = data.find_all('p')
        weather = inf[0].string   # 天气
        temperature_highest = inf[1].find('span').string    # 最高温度
        temperature_low = inf[1].find('i').string   # 最低温度
        temp.append(date)   # 添加日期
        temp.append(weather)    # 添加天气
        temp.append(temperature_low)    # 添加最低温度
        temp.append(temperature_highest)    # 添加最高温度
        data_al.append(temp)  # 数据全部储存在一个列表中
    return data_al
第二步

第三步:获取到的天气数据,进行本地化保存

# 把数据写入本地文件
def writedata(data, name):
    with open(name, 'a', errors='ignore', newline='') as f:
        f_csv = csv.writer(f)
        f_csv.writerows(data)
第三步

 

最后,进行调用

if __name__ == '__main__':
    url = 'http://www.weather.com.cn/weather/101010100.shtml'   # 获取天气数据的网址
    html = htmlcontent(url)    # 获取网页信息
    result = weatherdata(html)    # 解析网页信息,拿到需要的数据
    writedata(result, 'C:/Users/LoveCounter/Desktop/天气test.csv')  # 数据写入到 csv文档中

 

完整性代码,如下:

from bs4 import BeautifulSoup
import requests, time, random, socket, csv
import http.client


# 获取请求网址的完整HTML代码
def htmlcontent(url, data=None):
    header = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, sdch',
        'Accept-Language': 'zh-CN,zh;q=0.8',
        'Connection': 'keep-alive',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'
    }   # request 的请求头
    timeout = random.choice(range(80, 180))
    while True:
        try:
            rep = requests.get(url, headers=header, timeout=timeout)   # 请求url地址,获得返回response信息
            rep.encoding = 'utf-8'
            break
        except socket.timeout as e:
            print('3:', e)
            time.sleep(random.choice(range(8, 15)))

        except socket.error as e:
            print('4:', e)
            time.sleep(random.choice(range(20, 60)))

        except http.client.BadStatusLine as e:
            print('5:', e)
            time.sleep(random.choice(range(30, 80)))

        except http.client.IncompleteRead as e:
            print('6:', e)
            time.sleep(random.choice(range(5, 15)))
    return rep.text   # 返回的Html全部代码

# 过滤筛选有用数据
def weatherdata(html_text):
    data_al = []
    bs = BeautifulSoup(html_text, "html.parser")   # 创建BeautifulSoup对象并以html.parser方式解析
    li = bs.body.find('div', {'id': '7d'}).find('ul').find_all('li')   # 根据前端HTML代码的标签获取具体天气数据

    for data in li:
        temp = []
        date = data.find('h1').string
        inf = data.find_all('p')
        weather = inf[0].string   # 天气
        temperature_highest = inf[1].find('span').string    # 最高温度
        temperature_low = inf[1].find('i').string   # 最低温度
        temp.append(date)   # 添加日期
        temp.append(weather)    # 添加天气
        temp.append(temperature_low)    # 添加最低温度
        temp.append(temperature_highest)    # 添加最高温度
        data_al.append(temp)  # 数据全部储存在一个列表中
    return data_al


# 把数据写入本地文件
def writedata(data, name):
    with open(name, 'a', errors='ignore', newline='') as f:
        f_csv = csv.writer(f)
        f_csv.writerows(data)


if __name__ == '__main__':
    url = 'http://www.weather.com.cn/weather/101010100.shtml'   # 获取天气数据的网址
    html = htmlcontent(url)    # 获取网页信息
    result = weatherdata(html)    # 解析网页信息,拿到需要的数据
    writedata(result, 'C:/Users/LoveCounter/Desktop/天气test.csv')  # 数据写入到 csv文档中
获取天气完整性代码

 


推荐阅读
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
author-avatar
Gemini_2
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有