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

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

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

该篇将进行城市天气信息爬取实战,主要涉及到网页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格式数据的url
            if (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.c2c
            else:
                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]).T
                data_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 re

months = [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格式数据的url
            if (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.c2c
            else:
                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]).T
                data_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)
  • 23
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行网页抓取、解析和数据提取。 项目文件:除了代码,我还分享了整个项目的文件,包括设计稿、图标、图片等资源。这些资源对于理解项目背景和设计思路至关重要。 文档与操作手册:为了方便他人理解和使用我的作品,我编写了详细的操作手册和使用说明,同时提供了一份Markdown格式的文档,概述了项目的主要功能和特点。 学习笔记:在项目开发过程中,我记录了大量的学习笔记和心得体会。这些笔记不仅有助于理解项目的开发过程,还能为学习Python爬虫技术提供宝贵的参考资料。 适用人群: 这份项目合集适用于所有对Python爬虫开发感兴趣的人,无论你是学生、初学者还是有一定经验的开发者。无论你是想学习新的技术,还是想了解一个完整的项目开发流程,这份资料都将为你提供极大的帮助。 使用建议: 按部就班地学习:建议从基础的Python爬虫开发开始,逐步深入到实际应用中。通过实践,逐步掌握Python爬虫开发的各项技能。 参考项目文件和笔记:项目文件和笔记提供了丰富的背景信息开发经验。在学习的过程中,不妨参考这些资料,以帮助你更好地理解和学习。 动手实践:Python爬虫开发是一门实践性很强的技能。通过实际操作,你可以更好地掌握Python爬虫开发的各项技能,并提高自己的实践能力。Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行网页抓取、解析和数据提取。 项目文件:除了代码,我还分享了整个项目的文件,包括设计稿、图标、图片等资源。这些资源对于理解项目背景和设计思路至关重要。 文档与操作手册:为了方便他人理解和使用我的作品,我编写了详细的操作手册和使用说明,同时提供了一份Markdown格式的文档,概述了项目的主要功能和特点。 学习笔记:在项目开发过程中,我记录了大量的学习笔记和心得体会。这些笔记不仅有助于理解项目的开发过程,还能为学习Python爬虫技术提供宝贵的参考资料。 适用人群: 这份项目合集适用于所有对Python爬虫开发感兴趣的人,无论你是学生、初学者还是有一定经验的开发者。无论你是想学习新的技术,还是想了解一个完整的项目开发流程,这份资料都将为你提供极大的帮助。 使用建议: 按部就班地学习:建议从基础的Python爬虫开发开始,逐步深入到实际应用中。通过实践,逐步掌握Python爬虫开发的各项技能。 参考项目文件和笔记:项目文件和笔记提供了丰富的背景信息开发经验。在学习的过程中,不妨参考这些资料,以帮助你更好地理解和学习。 动手实践:Python爬虫开发是一门实践性很强的技能。通过实际操作,你可以更好地掌握Python爬虫开发的各项技能,并提高自己的实践能力。Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行网页抓取、解析和数据提取。 项目文件:除了代码,我还分享了整个项目的文件,包括设计稿、图标、图片等资源。这些资源对于理解项目背景和设计思路至关重要。 文档与操作手册:为了方便他人理解和使用我的作品,我编写了详细的操作手册和使用说明,同时提供了一份Markdown格式的文档,概述了项目的主要功能和特点。 学习笔记:在项目开发过程中,我记录了大量的学习笔记和心得体会。这些笔记不仅有助于理解项目的开发过程,还能为学习Python爬虫技术提供宝贵的参考资料。 适用人群: 这份项目合集适用于所有对Python爬虫开发感兴趣的人,无论你是学生、初学者还是有一定经验的开发者。无论你是想学习新的技术,还是想了解一个完整的项目开发流程,这份资料都将为你提供极大的帮助。 使用建议: 按部就班地学习:建议从基础的Python爬虫开发开始,逐步深入到实际应用中。通过实践,逐步掌握Python爬虫开发的各项技能。 参考项目文件和笔记:项目文件和笔记提供了丰富的背景信息开发经验。在学习的过程中,不妨参考这些资料,以帮助你更好地理解和学习。 动手实践:Python爬虫开发是一门实践性很强的技能。通过实际操作,你可以更好地掌握Python爬虫开发的各项技能,并提高自己的实践能力。Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发Python爬虫

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值