---
description: 날씨와 미세먼지 농도를 가져옵시다.
---

# 날씨, 미세먼지 농도

네이버에서 제공하는 서비스 중 날씨와 미세먼지 페이지가 있습니다.

{% embed url="https://weather.naver.com/rgn/cityWetrMain.nhn" %}
지역 날씨
{% endembed %}

{% embed url="https://weather.naver.com/air/airFcast.nhn" %}
미세먼지
{% endembed %}

위 두 페이지를 크롤링 후 날씨와 미세먼지 농도를 화면에 표현하는 어플리케이션을 만들어 봅시다.&#x20;

## 날씨

우리가 크롤링 해야되는 타겟입니다.&#x20;

![붉은 부분의 정보를 가져와야 합니다.](https://2648822586-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKJtFns8UmWWxSgNJgC%2F-LQm9VkTw5eCwWq--CxA%2F-LQmC3VRQibqMs1JAfKp%2F%E1%84%82%E1%85%A6%E1%84%8B%E1%85%B5%E1%84%87%E1%85%A5%20%E1%84%82%E1%85%A1%E1%86%AF%E1%84%8A%E1%85%B5%20%E1%84%90%E1%85%A1%E1%84%80%E1%85%A6%E1%86%BA.png?alt=media\&token=242ff26e-1615-4630-bddf-32209f340384)

![](https://2648822586-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKJtFns8UmWWxSgNJgC%2F-LQm9VkTw5eCwWq--CxA%2F-LQmCdlPYRHp3L2iiYgd%2F%E1%84%82%E1%85%A1%E1%86%AF%E1%84%8A%E1%85%B5%20%E1%84%90%E1%85%A1%E1%84%80%E1%85%A6%E1%86%BA%202.png?alt=media\&token=c8d47769-24e0-492c-9985-03ef2416db0a)

우측 붉은 사각형 텍스트가 좌측에 표현됩니다.\
우리가 주의 깁게 봐야되는 부분은 class 이름입니다.

```
<li class="nm">흐리고 비</li>
<span class="temp"><strong>11</strong>℃"</span>
<span class="rain"><strong>80</strong>%</span>
```

위 3개의 테그를 가져오면 서울 경기의 오늘 오전 날씨를 가져올 수 있습니다.

Naver URL : [https://weather.naver.com/rgn/cityWetrMain.nhn](https://weather.naver.com/rgn/cityWetrMain.nhn)

```
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup
import requests
URL = "https://weather.naver.com/rgn/cityWetrMain.nhn"  #지역별 날씨
html = requests.get(URL).text
soup = BeautifulSoup(html, 'html.parser')
print(soup)
```

02  HTML을 파싱하기 위해 BeatifulSoup 클레스를 가져옵니다.\
03  데이터를 가져오기위해 requests 모듈을 가져옵니다.\
04  데이터가 있는 URL을 지정합니다.\
05  requsts.get(URL)을 통해 데이터를 가져옵니다. \
&#x20;     requests.get(URL).text 로 가져온 데이터 중 필요 데이터만 꺼내옵니다.\
06  BeatifulSoup에 받아온 데이터를 넣고 html.parser 일을 시킵니다.

위 코드를 실행하면 페이지의 모든 텍스트가 출력됩니다. \
우리가 필요한 데이터는 class **nm**, **temp**, **rain** 에 있습니다.\
이제 필요한 데이터를 하나식 가져오겠습니다.

```
from bs4 import BeautifulSoup
import requests
URL = "https://weather.naver.com/rgn/cityWetrMain.nhn"  #지역별 날씨
html = requests.get(URL).text
soup = BeautifulSoup(html, 'html.parser')
watherTable = soup.find_all("li", class_="nm")
print(watherTable)
```

06  li 테그를 사용하는 class nm을 모두 가져옵니다.

그리고 실행을 해보면

![](https://2648822586-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKJtFns8UmWWxSgNJgC%2F-LQm9VkTw5eCwWq--CxA%2F-LQmMPaf9wboLrEdVUPl%2F%E1%84%8F%E1%85%B3%E1%84%85%E1%85%A9%E1%86%AF%E1%84%85%E1%85%B5%E1%86%BC%20%E1%84%8E%E1%85%A5%E1%84%8B%E1%85%B3%E1%86%B7.png?alt=media\&token=f5c7f277-8efb-4598-9714-6c97ca8c56a8)

이런 결과가 나오게 됩니다. 여기서 주의해야 될 점은 빨간 테두리를 보면 리스트라는 것을 알 수 있습니다.\
li테그를 사용하고 class nm이 여러게 있다는 것이죠.&#x20;

위와 같은 방법으로 온도와 강수확률도 가져오겠습니다.&#x20;

```
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup
import requests
URL = "https://weather.naver.com/rgn/cityWetrMain.nhn"  #지역별 날씨
html = requests.get(URL).text
soup = BeautifulSoup(html, 'html.parser')
watherTable = soup.find_all("li", class_="nm")
print(watherTable)
tempTable = soup.find_all("span", class_="temp")
print(tempTable)
rainTable = soup.find_all("span", class_="rain")
print(rainTable)
```

![](https://2648822586-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKJtFns8UmWWxSgNJgC%2F-LQm9VkTw5eCwWq--CxA%2F-LQmNJdHgO3XVtcmdKx2%2F%E1%84%86%E1%85%A9%E1%84%83%E1%85%B3%E1%86%AB%20%E1%84%90%E1%85%A1%E1%84%80%E1%85%A6%E1%86%BA%20%E1%84%85%E1%85%B5%E1%84%89%E1%85%B3%E1%84%90%E1%85%B3.png?alt=media\&token=ae8d478a-53ae-49aa-9a31-e6625fdf3c49)

화면과 나온 값을 비교해보면 도시 별 날씨 가 순차적으로 나오는 것을 확인할 수 있습니다.

우리가 원했던 오늘 오전 서울 경기의 날씨만 빼오기 위해서는 리스트의 첫 번째 값을 가져오면 됩니다.

```
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup
import requests
URL = "https://weather.naver.com/rgn/cityWetrMain.nhn"  #지역별 날씨
html = requests.get(URL).text
soup = BeautifulSoup(html, 'html.parser')
watherTable = soup.find_all("li", class_="nm")
tempTable = soup.find_all("span", class_="temp")
rainTable = soup.find_all("span", class_="rain")
print(watherTable[0].text)
print(tempTable[0].text)
print(rainTable[0].text)
```

10  첫 번째 값을 가져옵니다.

![결과화면](https://2648822586-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKJtFns8UmWWxSgNJgC%2F-LQm9VkTw5eCwWq--CxA%2F-LQmO2N08lBw32l4zxmj%2F%E1%84%80%E1%85%A7%E1%86%AF%E1%84%80%E1%85%AA.png?alt=media\&token=f277a7cc-a928-4b6f-ae8c-14b139f2adfa)

원했던 결과를 가져왔습니다.

미세먼지 또 한 위와 같은 과정을 통해 tag, class, id를 찾아 접근하는 방법을 사용하면 쉽게 구 할 수 있습니다.

## 미세먼지

네이버 날씨 : [https://weather.naver.com/air/airFcast.nhn](https://weather.naver.com/air/airFcast.nhn)

![](https://2648822586-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKJtFns8UmWWxSgNJgC%2F-LQm9VkTw5eCwWq--CxA%2F-LQmSZzXiJKLpIfsICOn%2F%E1%84%86%E1%85%B5%E1%84%89%E1%85%A6%E1%84%86%E1%85%A5%E1%86%AB%E1%84%8C%E1%85%B5.png?alt=media\&token=9946577d-4108-47eb-bffa-58096f23c90d)

```
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup
import requests
URL = "https://weather.naver.com/air/airFcast.nhn"  #미세먼지 
html = requests.get(URL).text
soup = BeautifulSoup(html, 'html.parser')
airTable = soup.find_all("div", class_="list_air_inn")
for air in airTable:
    today = air.find_all("li")
    for data in today:
        print(data.text)
```

![결과 화면](https://2648822586-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LKJtFns8UmWWxSgNJgC%2F-LQm9VkTw5eCwWq--CxA%2F-LQmSvWBRtF8skacbsd1%2F%E1%84%86%E1%85%B5%E1%84%89%E1%85%A6%E1%84%86%E1%85%A5%E1%86%AB%E1%84%8C%E1%85%B5%20%E1%84%80%E1%85%A7%E1%86%AF%E1%84%80%E1%85%AA.png?alt=media\&token=c73e819e-2f5b-4fed-b3dd-0b0ed004cfa0)

## &#x20;

