当前位置: 首页 > news >正文

Python抓取天气信息

 Python的详细学习还是需要些时间的。如果有其他语言经验的,可以暂时跟着我来写一个简单的例子。

2024年最新python教程全套,学完即可进大厂!(附全套视频 下载) (qq.com)

  我们计划抓取的数据:杭州的天气信息,杭州天气 可以先看一下这个网站。

  实现数据抓取的逻辑:使用python 请求 URL,会返回对应的 HTML 信息,我们解析 html,获得自己需要的数据。(很简单的逻辑)

 第一步:创建 Python 文件

  

  写第一段Python代码

if __name__ == '__main__':url = 'http://www.weather.com.cn/weather/101210101.shtml' print('my frist python file')

  这段代码类似于 Java 中的 Main 方法。可以直接鼠标右键,选择 Run。

  

 第二步:请求RUL

  python 的强大之处就在于它有大量的模块(类似于Java 的 jar 包)可以直接拿来使用。

  我们需要安装一个 request 模块: File - Setting - Product - Product Interpreter

  

  

  点击如上图的 + 号,就可以安装 Python 模块了。搜索 requests 模块(有 s 噢),点击 Install。

  

  我们顺便再安装一个 beautifulSoup4 和 pymysql 模块,beautifulSoup4 模块是用来解析 html 的,可以对象化 HTML 字符串。pymysql 模块是用来连接 mysql 数据库使用的。

  

  

  相关的模块都安装之后,就可以开心的敲代码了。

  定义一个 getContent 方法:

# 导入相关联的包
import requests
import time
import random
import socket
import http.client
import pymysql
from bs4 import BeautifulSoupdef getContent(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'breakexcept 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)))print('request success')return rep.text # 返回的 Html 全文

  在 main 方法中调用:

if __name__ == '__main__':url ='http://www.weather.com.cn/weather/101210101.shtml'html = getContent(url) # 调用获取网页信息print('my frist python file')

 第三步:分析页面数据

  定义一个 getData 方法:

def getData(html_text):final = []bs = BeautifulSoup(html_text, "html.parser")  # 创建BeautifulSoup对象body = bs.body #获取bodydata = body.find('div',{'id': '7d'})ul = data.find('ul')li = ul.find_all('li')for day in li:temp = []date = day.find('h1').stringtemp.append(date) #添加日期inf = day.find_all('p')weather = inf[0].string #天气temp.append(weather)temperature_highest = inf[1].find('span').string #最高温度,夜间可能没有这个元素,需要注意temperature_low = inf[1].find('i').string  # 最低温度temp.append(temperature_low)temp.append(temperature_highest)final.append(temp)print('getDate success')return final

  上面的解析其实就是按照 HTML 的规则解析的。可以打开 杭州天气 在开发者模式中(F12),看一下页面的元素分布。

 

  在 main 方法中调用:

if __name__ == '__main__':url ='http://www.weather.com.cn/weather/101210101.shtml'html = getContent(url)    # 获取网页信息result = getData(html)  # 解析网页信息,拿到需要的数据print('my frist python file')

数据写入excel

  现在我们已经在 Python 中拿到了想要的数据,对于这些数据我们可以先存放起来,比如把数据写入 csv 中。

  定义一个 writeDate 方法:

import csv #导入包def writeData(data, name):with open(name, 'a', errors='ignore', newline='') as f:f_csv = csv.writer(f)f_csv.writerows(data)print('write_csv success')

  在 main 方法中调用:

if __name__ == '__main__':url ='http://www.weather.com.cn/weather/101210101.shtml'html = getContent(url)    # 获取网页信息result = getData(html)  # 解析网页信息,拿到需要的数据writeData(result, 'D:/py_work/venv/Include/weather.csv') #数据写入到 csv文档中print('my frist python file')

  执行之后呢,再指定路径下就会多出一个 weather.csv 文件,可以打开看一下内容。

  

  

  到这里最简单的数据抓取--储存就完成了。

 数据写入数据库

   因为一般情况下都会把数据存储在数据库中,所以我们以 mysql 数据库为例,尝试着把数据写入到我们的数据库中。

 第一步创建WEATHER 表:

  创建表可以在直接在 mysql 客户端进行操作,也可能用 python 创建表。在这里 我们使用 python 来创建一张 WEATHER 表。

  定义一个 createTable 方法:(之前已经导入了 import pymysql 如果没有的话需要导入包)

def createTable():# 打开数据库连接db = pymysql.connect("localhost", "zww", "960128", "test")# 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor()# 使用 execute()  方法执行 SQL 查询cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法获取单条数据.data = cursor.fetchone()print("Database version : %s " % data) # 显示数据库版本(可忽略,作为个栗子)# 使用 execute() 方法执行 SQL,如果表存在则删除cursor.execute("DROP TABLE IF EXISTS WEATHER")# 使用预处理语句创建表sql = """CREATE TABLE WEATHER (w_id int(8) not null primary key auto_increment, w_date  varchar(20) NOT NULL ,w_detail  varchar(30),w_temperature_low varchar(10),w_temperature_high varchar(10)) DEFAULT CHARSET=utf8"""  # 这里需要注意设置编码格式,不然中文数据无法插入cursor.execute(sql)# 关闭数据库连接db.close()print('create table success')

  在 main 方法中调用:

if __name__ == '__main__':url ='http://www.weather.com.cn/weather/101210101.shtml'html = getContent(url)    # 获取网页信息result = getData(html)  # 解析网页信息,拿到需要的数据writeData(result, 'D:/py_work/venv/Include/weather.csv') #数据写入到 csv文档中createTable() #表创建一次就好了,注意print('my frist python file')

  执行之后去检查一下数据库,看一下 weather 表是否创建成功了。

  

 第二步批量写入数据至 WEATHER 表:

   定义一个 insertData 方法:

def insert_data(datas):# 打开数据库连接db = pymysql.connect("localhost", "zww", "960128", "test")# 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor()try:# 批量插入数据cursor.executemany('insert into WEATHER(w_id, w_date, w_detail, w_temperature_low, w_temperature_high) value(null, %s,%s,%s,%s)', datas)# sql = "INSERT INTO WEATHER(w_id, \#                w_date, w_detail, w_temperature) \#                VALUES (null, '%s','%s','%s')" % \#       (data[0], data[1], data[2])# cursor.execute(sql)    #单条数据写入# 提交到数据库执行db.commit()except Exception as e:print('插入时发生异常' + e)# 如果发生错误则回滚db.rollback()# 关闭数据库连接db.close()

  在 main 方法中调用:

if __name__ == '__main__':url ='http://www.weather.com.cn/weather/101210101.shtml'html = getContent(url)    # 获取网页信息result = getData(html)  # 解析网页信息,拿到需要的数据writeData(result, 'D:/py_work/venv/Include/weather.csv') #数据写入到 csv文档中# createTable() #表创建一次就好了,注意insertData(result) #批量写入数据print('my frist python file')

  检查:执行这段 Python 语句后,看一下数据库是否有写入数据。有的话就大功告成了。

  

Python学习籽料直接戳:2024年最新python教程全套,学完即可进大厂!(附全套视频 下载) (qq.com)

相关文章:

Python抓取天气信息

Python的详细学习还是需要些时间的。如果有其他语言经验的,可以暂时跟着我来写一个简单的例子。 2024年最新python教程全套,学完即可进大厂!(附全套视频 下载) (qq.com) 我们计划抓取的数据:杭州的天气信息…...

【超越拟合:深度学习中的过拟合与欠拟合应对策略】

如何处理过拟合 由于过拟合的主要问题是你的模型与训练数据拟合得太好,因此你需要使用技术来“控制它”。防止过拟合的常用技术称为正则化。我喜欢将其视为“使我们的模型更加规则”,例如能够拟合更多类型的数据。 让我们讨论一些防止过拟合的方法。 获…...

【Orange Pi 5与Linux内核编程】-理解Linux内核中的container_of宏

理解Linux内核中的container_of宏 文章目录 理解Linux内核中的container_of宏1、了解C语言中的struct内存表示2、Linux内核的container_of宏实现理解3、Linux内核的container_of使用 Linux 内核包含一个名为 container_of 的非常有用的宏。本文介绍了解 Linux 内核中的 contain…...

003.Linux SSH协议工具

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…...

web前端组织分析:深入剖析其结构、功能与未来趋势

web前端组织分析:深入剖析其结构、功能与未来趋势 在数字化浪潮的推动下,Web前端组织作为连接用户与数字世界的桥梁,其重要性日益凸显。本文将从四个方面、五个方面、六个方面和七个方面对Web前端组织进行深入分析,揭示其结构特点…...

GitCode热门开源项目推荐:Spider网络爬虫框架

在数字化高速发展时代,数据已成为企业决策和个人研究的重要资源。网络爬虫作为一种强大的数据采集工具受到了广泛的关注和应用。在GitCode这一优秀的开源平台上,Spider网络爬虫框架凭借其简洁、高效和易用性,成为了众多开发者的首选。 一、系…...

实现一个二叉树的前序遍历、中序遍历和后序遍历方法。

package test3;public class Test_A27 {// 前序遍历(根-左-右)public void preOrderTraversal(TreeNode root){if(rootnull){return;}System.out.println(root.val"");preOrderTraversal(root.left);preOrderTraversal(root.right);}// 中序遍…...

串扰(二)

三、感性串扰 首先看下串扰模型及电流方向: 由于电感是阻碍电流变化,受害线的电流方向和攻击线的电流方向相反。同时由于受害线阻抗均匀,故有Vb-Vf(感应电流属于电池内部电流)。 分析感性串扰大小仍然是按微分的方法…...

零基础入门学用Arduino 第四部分(三)

重要的内容写在前面: 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后,整体感觉是很好的,如果有条件的可以先学习一些相关课程,学起来会更加轻松,相关课程有数字电路…...

Mp3文件结构全解析(一)

Mp3文件结构全解析(一) MP3 文件是由帧(frame)构成的,帧是MP3 文件最小的组成单位。MP3的全称应为MPEG1 Layer-3 音频 文件,MPEG(Moving Picture Experts Group) 在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG 音频文件…...

ES 8.14 Java 代码调用,增加knnSearch 和 混合检索 mixSearch

1、pom依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>8.14.0</version></dependency><dependency><groupId>co.elastic.clients<…...

被腰斩的颍川郡守赵广汉

在颍川&#xff0c;他发明了举报箱&#xff0c;铁腕扫黑除恶。因为曾经在郡府所在地阳翟&#xff08;禹州&#xff09;当过县令&#xff0c;熟悉颍川社情民意&#xff0c;所以&#xff0c;任职郡守后雷厉风行&#xff0c;才不到一年&#xff0c;不但制服了骄横的豪门大族&#…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 目录管理器(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 目录管理器(200分) 🌍 评测功能需要订阅专栏后私信联系清隆…...

关于自学\跳槽\转行做网络安全行业的一些建议

很好&#xff0c;如果你是被题目吸引过来的&#xff0c;那请看完再走&#xff0c;还是有的~ 为什么写这篇文章 如何自学入行&#xff1f;如何小白跳槽&#xff0c;年纪大了如何转行等类似问题 &#xff0c;发现很多人都有这样的困惑。下面的文字其实是我以前的一个回答&#…...

计算机网络(1) OSI七层模型与TCP/IP四层模型

一.OSI七层模型 OSI 七层模型是国际标准化组织ISO提出的一个网络分层模型&#xff0c;它的目的是使各种不同的计算机和网络在世界范围内按照相同的标准框架实现互联。OSI 模型把网络通信的工作分为 7 层&#xff0c;从下到上分别是物理层、数据链路层、网络层、传输层、会话层、…...

认识QML

为什么使用Qt Quick&#xff1f; Qt4的设计用于满足开发者在主流桌面操作系统上有一套表现一致的窗口组件可以 使用。如今Qt的使用者面临了新的问题&#xff0c;他们需要提供可触碰交互的用户界面以满 足软件界面需求&#xff0c;并在主流桌面操作系统和移动操作系统上实现这些…...

llama-factory微调chatglm3

一、定义 案例/多卡 二、实现 案例 1. 下载chatglm3-6b-32k模型 2. 配置数据集微调指令 CUDA_VISIBLE_DEVICES0,1 llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path /home/chatglm3-6b-32k \--finetuning_type lora \--template chatglm3 \--d…...

大文件上传实现

分片上传 将大文件分割成多个小片&#xff08;chunk&#xff09;&#xff0c;逐个上传。每个片上传成功后&#xff0c;服务器可以返回确认信息。所有片上传完成后&#xff0c;服务器端将这些片重新组合成原始文件。 以下是一个简单的分片上传的前端实现示例&#xff1a; func…...

为何Proteus用户争相拥抱SmartEDA?揭秘背后的强大吸引力!

在电路设计与仿真领域&#xff0c;Proteus一度以其稳定性能和丰富功能赢得了众多用户的青睐。然而&#xff0c;近年来&#xff0c;越来越多的Proteus用户开始转向SmartEDA&#xff0c;这一新兴电路仿真软件正迅速崭露头角&#xff0c;成为行业内的翘楚。那么&#xff0c;究竟是…...

万界星空科技QMS质量管理介绍

产品的生产质量是企业发展之根本&#xff0c;对所有企业来说&#xff0c;建立完善质量控制体系&#xff0c;对企业生产经营以及发展竞争具有至关重要的影响&#xff0c;可以说是企业质量保证的防火墙。QMS质量管理系统对任何一家企业都具有重要意义&#xff0c;可帮助企业提高生…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...