728x90
같은 태그명의 데이터 가져오는 방법 : index 사용하기
웹 스크래핑 프로젝트 중 네이버에서 오늘 날씨 정보를 가져오고 있었다.

그중에서 오전과 오후를 나눠 각각 강수확률을 가져오려는데, 아래 사진과 같이 오전과 오후가 같은 태그명인 것을 발견했다.

여태까지 공부해 온 것은 Java 언어였기 때문에 파이썬 언어가 익숙지 않아서
어떻게 해결해야할까 고민을 했다.
검색을 통해 get_text( )가 공백을 포함하여 문자열을 받는 것을 알게 되었다.
그렇다면, split( )을 통해 리스트에 각각 문자열을 담으면 되지 않을까 생각을 해보았다.
그러나
afternoon_rain_rate = soup.find("span"
, attrs={"class":"weather_inner"}).get_text().split()
위처럼 코드를 작성하니 ['오전', '10%', '구름많음'] 으로 오전에 대한 정보만 나오길래,
weather_inner 태그가 2개여서 첫번째 태그 안에 담긴 정보만 가져오는 것을 알 수 있었다.
그래서 해당 태그를 모두 가져오는 함수를 찾아보니 find_all( ) 함수가 있어서 split( ) 을 통해 접근을 시도해보았다.
하지만, AttributeError 가 뜨면서 어떤 속성을 가져와야 할지 찾지 못하는 것을 알 수 있었다.
그냥 afternoon_rain_rate( ) 변수 자체를 출력해보니

위 사진처럼 엄청나게 많은 태그를 갖고 있었다.
weather_inner 태그를 갖는 것은

오늘 뿐만 아니라, 다른 요일에도 쓰여지고 있는 것이라는 것을 알 수 있었다.
그래서 아래와 같이 index 로 접근해서 해결할 수 있었다.
# 같은 클래스명을 공유해서 같은 클래스명을 가지는 태그를 모두 찾아서 변수에 담는다.
rain_rate = soup.find_all("span", attrs={"class":"weather_inner"})
# 그 후 리스트의 인덱스로 접근하고 해당 리스트들이 문자로 이루어진 것을 생각하여
# get_text() 로 접근하니, 출력이 잘 나오는 것을 확인할 수 있었다.
print(f"{rain_rate[0].get_text()} / {rain_rate[1].get_text()} ")
# -> 오전 10% 구름많음 / 오후 0% 맑음
728x90
'Project > Personal & Toy' 카테고리의 다른 글
| [AWS Lambda] EventBridge 스케줄러를 활용한 카카오톡 API 메세지 전송 (0) | 2023.11.14 |
|---|---|
| [AWS Lambda] HTTP 403 Error : url forbidden 문제 해결 (1) | 2023.11.14 |
| [Python] 웹 스크래핑 : requests.exceptions.ConnectionError (1) | 2023.11.02 |