코딩두의 포트폴리오

Google Scraping - weather 본문

Python

Google Scraping - weather

코딩두 2024. 5. 7. 23:20

요즘 다시 관심이 가는 스크래핑을 해보려고 시도하는 중이다.

 

먼저, 크롤링과 스크래핑의 공통점과 차이점을 정확히 짚고 넘어가려고 한다.

 

공통점

- 웹 페이지의 데이터 등의 정보를 수집하는 작업

 

차이점

크롤링(Crawling)

정의 - 웹 페이지들을 체계적으로 탐색하여 데이터를 수집

목적 - 웹 페이지를 대규모로 수집, 색인 -> 검색 엔진 DB 구축 

방법 - 자동화 프로그램이 웹 링크를 따라 이동하면서 데이터를 수집

 

스크래핑(Scraping)

정의 - 특정 웹 페이지들에서 필요한 데이터만 수집

목적 - 특정 정보를 수집하여 비즈니스 등의 목적을 둠

방법 - HTML 문서 구조 분석 / 필요한 데이터 추출을 위해 XPath, CSS Selector 등을 사용

 

 

 

결론부터 말하자면 코드의 기본은 작성을 완료한 상태이다.

 

각 라이브러리 임포트

import requests

requests: 웹 서버에 HTTP 요청을 보낸다.

from bs4 import BeautifulSoup

BeautifulSoup: HTML과 XML 파일을 파싱하는 라이브러리로, 웹 페이지의 내용을 구조적으로 분석하는 데 사용

 

함수 정의

'get_google_weather(city)'

city: 함수에 도시 이름을 문자열로 전달하여 해당 도시의 날씨 정보를 검색

 

URL 설정 / HTTP 요청

url = f"https://www.google.com/search?q=weather+{city}"

url: 구글 검색 URL을 설정 / 이 코드에서는 도시 이름에 따라 날씨 검색

q= 검색 쿼리며, 키워드 지정

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' }

headers 딕셔너리는 HTTP 요청 시 서버에 제공되는 추가 정보를 포함 / 서버에 요청

User-Agent: 요청을 보내는 클라이언트를 식별 -> 브라우저 종류, 버전, 호환성 등 파악

Why use it?

User-Agent를 웹 브라우저에서 발생하는 것처럼 설정 -> 스크립트가 실제로 사용되는 것처럼 보여지게 하기 위함

response = requests.get(url, headers=headers)

response: 서버로부터 응답을 받는다.

 

HTML 파싱 / 데이터 추출

soup = BeautifulSoup(response.text, 'html.parser')

soup: response.text에서 반환된 HTML을 'BeautifulSoup' 객체로 변환

temperature = soup.find('div', attrs={'class': 'BNeawe iBp4i AP7Wnd'}).text

weather_condition = soup.find('div', attrs={'class': 'BNeawe tAd8D AP7Wnd'}).text

find(): 조건에 맞는 HTML 요소를 찾는다. 클래스 이름을 사용해 온도와 날씨를 포함하는 'div' 태그를 찾는다.

print(f"Weather in {city}: {weather_condition}, {temperature}")

날씨 상태를 콘솔에 출력

 

예외 처리

except AttributeError:

print("Could not find weather data for", city)

AttributeError: find() 메소드가 해당 클래스를 찾지 못할 때 발생하며 오류 메시지를 출력

 

실행 부분

city = 'Busan'

city: 날씨 정보를 가져올 도시 이름 정하기

get_google_weather(city)

정한 도시의 날씨 정보 조회를 위해 함수 호출

 

터미널 출력