일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- KAKAO
- Kubernetes
- colab
- ICT멘토링
- VSCode
- LINUX MASTER
- cloud
- Docker
- 코딩도장
- Python
- Spring
- git
- 인터넷의이해
- 국가과제
- C언어
- Database
- Machine Learning
- ChatGPT
- rnn
- Github
- Rocky Linux
- 크롤링 개발
- Resnet
- 고등학생 대상
- Powershell
- GoogleDrive
- API
- OSS
- suricata
- Spring Boot
- Today
- Total
코딩두의 포트폴리오
Google Scraping - weather 본문
요즘 다시 관심이 가는 스크래핑을 해보려고 시도하는 중이다.
먼저, 크롤링과 스크래핑의 공통점과 차이점을 정확히 짚고 넘어가려고 한다.
공통점
- 웹 페이지의 데이터 등의 정보를 수집하는 작업
차이점
크롤링(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)
정한 도시의 날씨 정보 조회를 위해 함수 호출
터미널 출력