Python爬虫抓取天气信息

废话不多说,直接上代码,我们爬取的是:衡阳天气预报,衡阳7天天气预报,衡阳15天天气预报,衡阳天气查询

,这个网站其他类型的页面也可以爬取。

import requests
from bs4 import BeautifulSoup

# 函数作用:获取一个网页的天气信息
# 参数:html_url -- 要爬取的网页网址
# 返回值:类型:list -- 一个列表,每个元素是字典类型,每个元素存储的一天的天气信息
def get_html_weather_info(html_url):
    ret_info = []   # 返回的数据类型是列表,每一个元素都是字典,存储的当天的天气信息
    url = html_url  # 天气网页地址
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
        'Accept-Charset': 'utf-8'
    }
    response = requests.get(url=url, headers=headers)
    if response.status_code != 200:  # 请求失败
        print(f'GET请求网页失败({response.status_code}):{url}')
        exit()
    soup = BeautifulSoup(response.content.decode('utf-8'), 'html.parser')
    res_list1 = soup.find_all('li', class_='sky skyid lv3 on')
    res_list2 = soup.find_all('li', class_='sky skyid lv3')
    res_list3 = soup.find_all('li', class_='sky skyid lv2')
    total_result = res_list1 + res_list2 + res_list3
    for cur_li_itme in total_result:
        # 获取日期
        date = cur_li_itme.find('h1').get_text()
        # 获取天气
        weather = cur_li_itme.find('p', class_='wea').get_text()
        # 获取起始温度
        first_temp = cur_li_itme.find('p', class_='tem').find('span').get_text()
        last_temp = cur_li_itme.find('p', class_='tem').find('i').get_text()
        # 获取起始风向
        wind_direct_items = cur_li_itme.find('p', class_='win').find('em').find_all('span')
        first_wind_direct = wind_direct_items[0]['title']
        last_wind_direct = wind_direct_items[1]['title']
        # 获取风速
        wind_speed = cur_li_itme.find('p', class_='win').find('i').get_text()
        # 存贮好数据,用来返回
        ret_info.append({'date': date,
            'weather': weather,
            'first_temp':first_temp,
            'last_temp':last_temp,
            'first_wind_direct':first_wind_direct,
            'last_wind_direct':last_wind_direct,
            'wind_speed': wind_speed
            })
    # 返回一个字典,存储着页面的信息
    return ret_info

if __name__ == '__main__':
    url = 'https://www.weather.com.cn/weather/101160101.shtml'  # 天气网页地址
    # 爬取
    hengyang_wea_info = get_html_weather_info(url)
    # 打印
    print(hengyang_wea_info)

其他地区的同类型页面也可以爬取哟,调用get_html_weather_info这一个函数就OK了,这个代码直接复制到pycharm中就可以运行了!!!能直接跑。

Python爬虫抓取天气数据通常涉及以下几个步骤: 1. **选择API或网站**:许多天气服务提供API,如中国气象局的API、Weather API或AccuWeather等。如果没有官方API,也可以直接从公开网页抓取,比如OpenWeatherMap的免费版。 2. **获取API密钥(如有需要)**:对于需要API访问的服务,你需要注册并获取一个API密钥,以便后续请求数据。 3. **使用库**:Python有许多用于网络爬取的库,如requests(发送HTTP请求)、BeautifulSoup或Scrapy(解析HTML内容)。例如,`requests`可以用来发送GET请求到API,`json`处理返回的JSON格式数据。 4. **编写代码**:创建一个函数,利用上述库设置请求头(可能包含API密钥),向指定URL发送请求,然后解析返回的数据。如果是API响应,直接解析成Python字典或列表;如果是网页,先转换成HTML再提取所需信息。 5. **存储数据**:抓取到的数据可能存入CSV、Excel文件,或者数据库中,根据需求选择合适的存储方式。 6. **异常处理**:确保在抓取过程中处理可能出现的错误,比如网络连接问题、API限制或页面结构变化。 下面是一个简单的示例,假设使用requests库和pyquery库来抓取网页数据: ```python import requests from bs4 import BeautifulSoup def get_weather_data(city): url = f'https://www.example.com/weather/{city}' response = requests.get(url) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') # 使用CSS选择器或XPath定位天气信息 temperature = soup.select_one('.temperature').text description = soup.select_one('.weather-description').text return {'city': city, 'temperature': temperature, 'description': description} else: print(f"无法获取数据:{response.status_code}") # 示例城市 city = '北京' data = get_weather_data(city) print(data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值