Python爬取天气图片

1. 简介

天气预报是人们生活中常用的信息之一,我们经常使用手机APP或者网站来查看天气情况。有时候我们想要保存一些特别的天气图片,比如美丽的日出、雨后的彩虹等。本文将介绍如何使用Python爬取天气图片,并保存到本地。

2. 准备工作

在开始之前,我们需要准备以下工具和环境:

  • Python:本文使用Python 3.x版本;
  • 网络爬虫库:本文使用requests库来发送HTTP请求,beautifulsoup4库用于解析HTML页面;
  • 图片处理库:本文使用Pillow库来处理图片。

你可以使用以下命令来安装这些库:

pip install requests
pip install beautifulsoup4
pip install Pillow

3. 爬取天气图片

3.1 分析目标网站

我们选择爬取一个天气预报网站的图片作为示例。在开始之前,我们需要先观察目标网站的HTML结构。通过查看网页源代码,我们可以找到图片所在的HTML标签和属性。

3.2 发送HTTP请求

使用requests库发送HTTP请求,获取目标网页的HTML内容。以下是示例代码:

import requests

url = "  # 替换为目标网站的URL
response = requests.get(url)
html = response.text

3.3 解析HTML页面

使用beautifulsoup4库来解析HTML页面,并提取出图片的URL。以下是示例代码:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")
img_tags = soup.find_all("img")

image_urls = []
for img in img_tags:
    image_urls.append(img["src"])

3.4 下载图片

利用解析得到的图片URL,使用requests库下载图片,并保存到本地。以下是示例代码:

import os

save_dir = "images"  # 图片保存的目录,可以修改为你想要保存的路径
os.makedirs(save_dir, exist_ok=True)

for url in image_urls:
    response = requests.get(url, stream=True)
    filename = url.split("/")[-1]
    save_path = os.path.join(save_dir, filename)
    with open(save_path, "wb") as f:
        for chunk in response.iter_content(1024):
            f.write(chunk)

3.5 完整代码

以下是完整的爬取天气图片的代码:

import os
import requests
from bs4 import BeautifulSoup

def crawl_weather_images(url, save_dir):
    response = requests.get(url)
    html = response.text
    
    soup = BeautifulSoup(html, "html.parser")
    img_tags = soup.find_all("img")
    
    image_urls = []
    for img in img_tags:
        image_urls.append(img["src"])
    
    os.makedirs(save_dir, exist_ok=True)
    for url in image_urls:
        response = requests.get(url, stream=True)
        filename = url.split("/")[-1]
        save_path = os.path.join(save_dir, filename)
        with open(save_path, "wb") as f:
            for chunk in response.iter_content(1024):
                f.write(chunk)

if __name__ == "__main__":
    url = "  # 替换为目标网站的URL
    save_dir = "images"  # 图片保存的目录,可以修改为你想要保存的路径
    crawl_weather_images(url, save_dir)

4. 类图

以下是爬取天气图片的类图:

classDiagram
    class WeatherImageCrawler {
        +crawl_weather_images(url: str, save_dir: str): None
    }

5. 序列图

以下是爬取天气图片的序列图:

sequenceDiagram
    participant User
    participant WeatherImageCrawler
    participant requests
    participant BeautifulSoup
    participant os
    
    User->>WeatherImageCrawler: crawl_weather_images(url, save_dir)
    WeatherImageCrawler->>requests: get(url)
    requests->>WeatherImageCrawler: response
    WeatherImageCrawler->>BeautifulSoup: BeautifulSoup(html)
    BeautifulSoup->>WeatherImageCrawler: soup
    WeatherImageCrawler->>soup: find_all("img")
    soup->>WeatherImageCrawler: img_tags
    WeatherImageCrawler->>img_tags: loop through
    img_tags->