目次
目标
预备工作
爬取数据的开始时间和竣事时间
爬取数据并剖析
将数据转换为DataFrame并生存为CSV文件
本文将先容怎样使用Python编写一个简朴的爬虫步调,以爬取珠海市2011年至2023年的气候数据,并将这些数据生存为CSV文件。我们将涉及到以下知识点:
- 使用requests库发送HTTP哀求
- 使用lxml库剖析HTML文档
- 使用datetime和dateutil库处理处罚日期
- 使用pandas库利用数据并将其生存为CSV文件
目标
爬取气候网中珠海地域的汗青气候数据,将日期、最高气温、最低气温、气候、风向各个数据爬取下来,并存储为csv文件
预期效果展示
预备工作
起首,我们必要安装一些须要的库。在下令行中运行以下下令来安装它们:
- pip install requests lxml pandas
复制代码 接下来,我们导入所需的库:
- import pandas as pd
- import requests
- from lxml import etree
- from datetime import datetime
- from dateutil.relativedelta import relativedelta
复制代码 爬取数据的开始时间和竣事时间
我们必要确定要爬取的日期范围。在这个例子中,由于我们爬取的网站https://lishi.tianqi.com/zhuhai/202407.html翻页是有明确的url,而且是按末了时间变动的,因此我们必要创建一个列表,用于存储我们的时间列表,后续使用循环将我们的url中日期数据举行更换,我们将爬取2011年1月1日至2023年12月31日的数据。
- # 爬取数据的开始时间
- start_date = datetime(2011, 1, 1)
- # 爬取数据的结束时间
- end_date = datetime(2023, 12, 31)
- # 遍历间隔,1个月
- step = relativedelta(months=1)
- # 创建一个列表存放时间
- date_list = []
- while start_date <= end_date:
- date_list.append(start_date.strftime('%Y%m'))
- start_date += step
复制代码 这里我们可以print(date_list)一下,检察我们的效果
爬取数据并剖析
接下来,我们将遍历date_list中的每个日期,发送HTTP哀求到对应的URL,并剖析返回的HTML文档以提取所需的气候数据。
- # 创建一个列表存放所有数据
- data_list = []
- # 爬取的年份:2011-2023,12年的每一天的数据
- for date in date_list:
- # 爬取数据的网页
- url = f"https://lishi.tianqi.com/zhuhai/{date}.html"
- # 请求头信息,防爬虫操作
- headers = {
- 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'
- }
- # 1、 发送请求
- response = requests.get(url=url,headers=headers)
- if response.status_code == 200:
- # 2、解析数据
- # 数据不是一个动态页面,页面变更时html也会跟着变更
- # 获取到的数据不是json文件,使用xpath解析
- html = etree.HTML(response.text)
- # 获取到30天的数据信息,存放于lis中
- lis = html.xpath('/html/body/div[7]/div[1]/div[4]/ul/li')
- # 由于直接xpath获取到的元素是一个列表
- # 这里我们需要定义一个功能函数,返回我们想要的数据文本
- def get_frist_text(list):
- return list[0]
- # 使用for循环遍历lis,取到每一个li
- # 因为实在lis中获取的信息,所以用 . 表示当前位置
- for li in lis:
- time = get_frist_text(li.xpath('./div[1]/text()'))
- maxtemp = get_frist_text(li.xpath('./div[2]/text()'))
- mintemp = get_frist_text(li.xpath('./div[3]/text()'))
- weather = get_frist_text(li.xpath('./div[4]/text()'))
- wind = get_frist_text(li.xpath('./div[5]/text()'))
- data_list.append([time,maxtemp,mintemp,weather,wind])
- else:
- print("请求失败")
复制代码 将数据转换为DataFrame并生存为CSV文件
末了,我们将网络到的数据转换为pandas的DataFrame对象,并将其生存为CSV文件。
- # 将数据转换为pands DataFrame
- df = pd.DataFrame(data_list,columns=['日期','最高温度','最低温度','天气','风向'])
- # 将DataFrame保存为csv文件
- df.to_csv('zhuhai_weather_data_csv',index=False,encoding='utf-8-sig')
复制代码 爬取效果部门信息展示
至此,我们已经完成了整个爬虫步调。通过运行这段代码,你将得到一个名为zhuhai_weather_data_csv的CSV文件,此中包罗了珠海市2011年至2023年的气候数据。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |