【爬虫实战】——Python爬取天气信息

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972

   个人介绍: 研一|统计学|干货分享
         擅长Python、Matlab、R等主流编程软件
         累计十余项国家级比赛奖项,参与研究经费10w、40w级横向

文章目录

  • 1 Python网页爬虫简介
  • 2 爬虫实战
    • 2.1 导入相关包
    • 2.2 爬取时间范围及城市设置
    • 2.3 爬取信息设置
    • 2.4 天气信息抓取
    • 2.4 结果存储
    • 2.5 效果展示
  • 3 完整代码

该篇将进行城市天气信息爬取实战,主要涉及到网页url解析、正则表达匹配等技术,可用作网页爬虫练手项目。

1 Python网页爬虫简介

  Python是一种流行的编程语言,用于开发各种应用程序,包括网页爬虫。网页爬虫(Web Crawler)是一种自动化程序,用于在互联网上浏览和收集数据。Python提供了许多库和工具,使开发人员能够轻松地构建网页爬虫。

  Python进行网页爬虫的基本原理是模拟人类在互联网上浏览网页的行为。爬虫程序会向目标网站发送请求,获取网页的HTML代码,然后解析这个HTML代码,提取出所需的数据。Python中的requests和BeautifulSoup库是实现这个过程的重要工具。

  Python爬虫架构主要由以下几个部分组成:

  1. 调度器(Scheduler):负责调度URL管理器、下载器、解析器之间的协调工作。
  2. URL管理器(URL Manager):包括待爬取的URL地址和已爬取的URL地址,防止重复抓取URL和循环抓取URL。
  3. 网页下载器(Web Downloader):负责从互联网上下载网页的HTML代码。
  4. 网页解析器(Web Parser):负责解析网页的HTML代码,提取出所需的数据。
  5. 应用程序(Application):从网页中提取的有用数据组成的一个应用。

  在Python中进行网页爬虫开发时,还需要注意遵守网站的robots.txt文件规定,以避免对网站造成不必要的负担或违反法律法规。同时,爬虫程序也需要处理各种网络异常和错误,以确保程序的稳定性和可靠性。

  总之,Python是一种非常适合进行网页爬虫开发的编程语言,通过掌握相关的库和工具,开发人员可以轻松地构建出高效、稳定的爬虫程序,从互联网上获取所需的数据。

2 爬虫实战

2.1 导入相关包

import requests
import pandas as pd
import re

2.2 爬取时间范围及城市设置

months = [1,2,3,4,5,6,7,8,9,10,11,12]
years = [2016,2017,2018,2019,2020,2021,2022,2023] 
citys = [59287]

此处城市代码选取‘59287’,实际操作可另选区域或多区域。

2.3 爬取信息设置

index_ = ['MaxTemp','MinTemp', 'WindDir', 'Wind', 'Weather','Aqi','AqiInfo','AqiLevel'] 
# 选取的气象要素

2.4 天气信息抓取

data = pd.DataFrame(columns=index_)  # 建立一个空dataframe
for c in citys:for y in years:for m in months:# 找到json格式数据的urlif (y<2017) or (y==2017)&(m<=11):url = "http://tianqi.2345.com/t/wea_history/js/"+str(c)+"_"+str(y)+str(m)+".js" # ?qq-pf-to=pcqq.c2celse:url = "http://tianqi.2345.com/t/wea_history/js/"+str(y)+str(m).zfill(2)+"/"+str(c)+"_"+str(y)+str(m).zfill(2)+".js"print(url)response = requests.get(url=url)if response.status_code == 200:  # 防止url请求无响应response2 = response.text.replace("'", '"')  # 这一步可以忽略#  利用正则表达式获取各个气象要素(方法不唯一)date = re.findall("[0-9]{4}-[0-9]{2}-[0-9]{2}", response2)[:-2]mintemp = re.findall('yWendu:"(.*?)℃', response2)maxtemp = re.findall('bWendu:"(.*?)℃', response2)winddir = re.findall('fengxiang:"([\u4E00-\u9FA5]+)',response2)wind = re.findall('fengli:"([\u4E00-\u9FA5]+)',response2)weather = re.findall('tianqi:"([[\u4E00-\u9FA5]+)~?', response2)aqi = re.findall('aqi:"(\d*)',response2)aqiInfo = re.findall('aqiInfo:"([\u4E00-\u9FA5]+)',response2)aqiLevel = re.findall('aqiLevel:"(\d*)',response2)data_spider = pd.DataFrame([maxtemp,mintemp, winddir, wind, weather,aqi,aqiInfo,aqiLevel]).Tdata_spider.columns = index_  # 修改列名data_spider.index = date  # 修改索引data = pd.concat((data,data_spider), axis=0)  # 数据拼接print('%s年%s月的数据抓取成功' % (y, m))else:print('%s年%s月的数据不存在' % (y, m))break

2.4 结果存储

data.to_excel('D:\\天气数据可视化\\天气数据可视化.xlsx')
print('爬取数据展示:\n', data)

2.5 效果展示

3 完整代码

import requests
import pandas as pd
import remonths = [1,2,3,4,5,6,7,8,9,10,11,12]
years = [2016,2017,2018,2019,2020,2021,2022,2023] 
citys = [59287] index_ = ['MaxTemp','MinTemp', 'WindDir', 'Wind', 'Weather','Aqi','AqiInfo','AqiLevel']  # 选取的气象要素
data = pd.DataFrame(columns=index_)  # 建立一个空dataframe
for c in citys:for y in years:for m in months:# 找到json格式数据的urlif (y<2017) or (y==2017)&(m<=11):url = "http://tianqi.2345.com/t/wea_history/js/"+str(c)+"_"+str(y)+str(m)+".js" # ?qq-pf-to=pcqq.c2celse:url = "http://tianqi.2345.com/t/wea_history/js/"+str(y)+str(m).zfill(2)+"/"+str(c)+"_"+str(y)+str(m).zfill(2)+".js"print(url)response = requests.get(url=url)if response.status_code == 200:  # 防止url请求无响应response2 = response.text.replace("'", '"')  # 这一步可以忽略#  利用正则表达式获取各个气象要素(方法不唯一)date = re.findall("[0-9]{4}-[0-9]{2}-[0-9]{2}", response2)[:-2]mintemp = re.findall('yWendu:"(.*?)℃', response2)maxtemp = re.findall('bWendu:"(.*?)℃', response2)winddir = re.findall('fengxiang:"([\u4E00-\u9FA5]+)',response2)wind = re.findall('fengli:"([\u4E00-\u9FA5]+)',response2)weather = re.findall('tianqi:"([[\u4E00-\u9FA5]+)~?', response2)aqi = re.findall('aqi:"(\d*)',response2)aqiInfo = re.findall('aqiInfo:"([\u4E00-\u9FA5]+)',response2)aqiLevel = re.findall('aqiLevel:"(\d*)',response2)data_spider = pd.DataFrame([maxtemp,mintemp, winddir, wind, weather,aqi,aqiInfo,aqiLevel]).Tdata_spider.columns = index_  # 修改列名data_spider.index = date  # 修改索引data = pd.concat((data,data_spider), axis=0)  # 数据拼接print('%s年%s月的数据抓取成功' % (y, m))else:print('%s年%s月的数据不存在' % (y, m))break
data.to_excel('D:\\天气数据可视化\\天气数据可视化.xlsx')
print('爬取数据展示:\n', data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型推荐落地啦!融合知识图谱,蚂蚁集团发布!

引言&#xff1a;电商推荐系统的新突破 随着电子商务平台的蓬勃发展&#xff0c;推荐系统已成为帮助用户在信息过载时代中筛选和发现产品的关键工具。然而&#xff0c;传统的推荐系统主要依赖历史数据和用户反馈&#xff0c;这限制了它们在新商品推出和用户意图转变时的有效性…

使用AspectJ进行面向切面编程(AOP)

第1章 引言 大家好&#xff0c;我是小黑&#xff0c;业务开发中&#xff0c;咱们经常会遇到这样的情况&#xff1a;有些代码几乎在每个方法里都要用到&#xff0c;比如日志记录、权限校验、或者性能监测。如果每次都手动加入这些代码&#xff0c;不仅效率低下&#xff0c;而且…

深入了解接口测试:方法、工具和关键考虑因素

接口测试是软件测试中的一项重要工作&#xff0c;它涉及到系统与系统之间的交互点。接口可以是外部接口&#xff0c;也可以是内部接口&#xff0c;包括上层服务与下层服务接口以及同级接口。在接口测试中&#xff0c;我们需要确保接口能够按照预期的方式进行通信和交互&#xf…

C++ 模拟OJ

目录 1、1576. 替换所有的问号 2、 495. 提莫攻击 3、6. Z 字形变换 4、38. 外观数列 5、 1419. 数青蛙 1、1576. 替换所有的问号 思路&#xff1a;分情况讨论 ?zs&#xff1a;左边没有元素&#xff0c;则仅需保证替换元素与右侧不相等&#xff1b;z?s&#xff1a;左右都…

islide2024免费版PPT插件下载

一、功能概览 iSlide PPT插件是一款专为PowerPoint用户设计的辅助工具&#xff0c;其功能全面且实用&#xff0c;主要包括但不限于以下几点&#xff1a; 设计元素库&#xff1a;提供丰富的设计元素&#xff0c;如主题、布局、图标、配色等&#xff0c;用户可以直接拖拽使用&a…

【Python】OpenCV-使用ResNet50进行图像分类

使用ResNet50进行图像分类 如何使用ResNet50模型对图像进行分类。 import os import cv2 import numpy as np from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions from tensorflow.keras.preprocessing import image# 设置…

【Python】进阶学习:pandas--read_excel()函数的基本使用

【Python】进阶学习&#xff1a;pandas–read_excel()函数的基本使用 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希…

【好书推荐-第七期】《RTC程序设计:实时音视频权威指南》(音视频开发必看!)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…

nodejs,JSDOM 补 window环境

window[atob] 是一个在浏览器中使用的 JavaScript 函数&#xff0c;用于将 base64 编码的字符串解码为原始数据。具体来说&#xff0c;atob 函数会将 base64 字符串解码为一个 DOMString&#xff0c;其中包含解码后的二进制数据。这在处理从服务器获取的 base64 编码的数据或在…

多平台拼音输入法软件的开发

拼音输入法从上个世纪发展到现在, 已经发展了几十年了, 技术上已经非常成熟了. 换句话说, 就是实际上没多少技术含量, 随便来个人就能手搓一个. 本文介绍一个简单的多平台拼音输入法软件的设计和实现, 支持 GNU/Linux (ibus) 平台 (PC) 和 Android 平台 (手机). 目录 1 中文输…

E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

比如&#xff0c;安装ros的时候&#xff0c;用 执行&#xff1a; sudo apt install ros-melodic-desktop-full 出现如下问题&#xff1a; 如果你根据提示&#xff0c;安装ros-melodic-desktop&#xff0c;他有会说类似“E: 无法修正错误&#xff0c;因为您要求某些软件包保持…

Vue.js入门指南:简介、环境配置与Yarn创建项目

一、Vue.js简介 Vue.js&#xff0c;一个流行的JavaScript框架&#xff0c;以其直观、灵活和高效的特点&#xff0c;在前端开发者中赢得了广泛的赞誉。Vue.js的核心库专注于视图层&#xff0c;使得开发者能够构建出响应式的数据绑定和组合的视图组件。Vue.js的目标是通过尽可能简…

BUUCTF---[极客大挑战 2019]Http1

1.题目描述&#xff0c;在地址框输入下面的网址 2.来到页面&#xff0c;ctrlu查看源码&#xff0c;仔细观察会看到一个.php的跳转页面 3.点进去页面提示It doesnt come from https://Sycsecret.buuoj.cn 4.页面提示它不是来源于这个网址&#xff0c;我们需要用bp抓包对数据进行…

Web开发介绍,制作小网站流程和需要的技术【详解】

1.什么是web开发 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 所以Web开发说白了&#xff0c;就是开发网站的&#xff0c;例如网站&#xff1a;淘宝&#xff0c;京东等等 2. 网站的工作流程 1.首先我们需…

sparse transformer 常见稀疏注意力

参考&#xff1a; https://zhuanlan.zhihu.com/p/259591644 主要就是降低transformer自注意力模块的复杂度 复杂度主要就是 Q K^T影响的&#xff0c;稀疏注意力就是在Q点乘K的转置这模块做文章 下列式一些sparse transformer稀疏注意力方法 a、transformer原始的 &#xff0…

b站小土堆pytorch学习记录—— P17 土堆说卷积操作

文章目录 一、前置知识什么是卷积操作 二、代码 一、前置知识 什么是卷积操作 推荐几个高赞博客&#xff1a; 卷积最容易理解的解释 卷积神经网络&#xff08;CNN&#xff09;详细介绍及其原理详解 还有pytorch官网的动态图&#xff1a; pytorch卷积 二、代码 import t…

MyBatis源码分析之基础支持层反射

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ &#x1f440;&#x1f440;&#x1f440; 个人博客&#xff1a;小奥的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;个人CSDN ⭐️⭐️⭐️&#xff1a;传送门 &#x1f379; 本人24应届生一枚&#xff0c;技术和水平有限&am…

Vision Pro开发者学习路线

官方给到的Vision Pro开发者学习路线&#xff1a; 1. 学习基础知识&#xff1a; - 学习 Xcode、Swift 和 SwiftUI 的基础知识&#xff0c;包括语法、UI 设计等。 - 掌握 ARKit 和 SwiftUI 的使用&#xff0c;了解如何创建沉浸式增强现实体验。 2. 学习 3D 建模&#xf…

『Linux从入门到精通』第 ㉕ 期 - System V 共享内存

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f427;共享内存原理&#x1f427;共享内存相关函数&#x1f426;key 与 shmid 区别 &#x1f427;代码实例 &#x1f490;专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0…