대회 : https://dacon.io/competitions/official/229255/overview/
selenium - Colab에서 실행하기(chrome)
Selenium이란?
Selenium은 주로 웹앱을 테스트하는데 이용하는 프레임워크다. webdriver라는 API를 통해 운영체제에 설치된 Chrome등의 브라우저를 제어하게 된다. ‘눈에 보이는’ 컨텐츠라면 모두 가져올 수 있다.
전체 코드 : 1등_코드_날씨데이터_크롤링(colab_버전)
-
패키지 설치 - selenium과 chromedriver
!pip install selenium !apt-get update # apt install을 정확히 실행하기 위해 설치된 패키지 업데이트 !apt install chromium-chromedriver #패키지 설치 !cp /usr/lib/chromium-browser/chromedriver /usr/bin
cp : 유닉스 셸에서 한 파일을 어떤 장소에서 다른 장소로 또는 다른 파일 시스템으로 옮길때 사용하는 명령어
/usr/lib/chromium-browser/chromedriver 파일을 /usr/bin로 복사한다. -
webdriver
Chrome Headless
: Chrome 브라우저를 GUI 없이 사용할 수 있는 모드
리눅스 서버와 같이 GUI를 제공하지 않는 환경에서 '--no-sandbox' 옵션 추가
disable-dev-shm-usage도 마찬가지로 GUI를 사용할 수 없어서 추가하는 것 같다.
참고 링크
sys.path.insert : 다른 폴더(경로)에 있는 python 파일 import 가능하도록
경로를 환경변수로 지정 --> 경로를 환경변수로 설정하게 해주면 그 경로 안의 프로그램을 실행시킬 때 마다
경로를 매번 입력하지 않아도 된다.
import sys
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
from selenium import webdriver
#chrome의 option 설정
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless') #chrome 창이 나오지 않게 해준다.
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
#1등 코드에서의 browser == driver
driver = webdriver.Chrome('chromedriver', chrome_options=chrome_options)
- 날씨 데이터 크롤링
import pandas as pd
import time
weather\_data\_10 = pd.DataFrame(columns = \['현재일기\_10','현재기온\_10','체감온도\_10','일강수\_10'\])
url = '[http://www.weather.go.kr/weather/observation/currentweather.jsp?auto\_man=m&type=t99®=184&tm=2019.10.25.16%3A00&x=19&y=7'](http://www.weather.go.kr/weather/observation/currentweather.jsp?auto_man=m&type=t99®=184&tm=2019.10.25.16%3A00&x=19&y=7')
driver.get(url) #browser == driver
for i in range(0, 46):
i+=1
#id를 찾고 그 공간을 비운 후 새로운 값을 넣어준다 (날짜값,10시)
elem = driver.find\_element\_by\_id('observation\_text')
elem.clear()
elem.send\_keys("2019.9.{}.10:00".format(i))
btn = driver.find\_elements\_by\_class\_name('btn')
btn\[2\].click()
time.sleep(1)
weathers = driver.find\_elements\_by\_css\_selector('td')
weather\_data\_10 = weather\_data\_10.append(pd.DataFrame(\[\[weathers\[40\].text,weathers\[44\].text, weathers\[46\].text, weathers\[47\].text\]\],columns=\['현재일기\_10','현재기온\_10','체감온도\_10','일강수\_10'\]))
print('success !')
driver.close()
geopy
먼저 Geocoding이란 고유명칭(주소, 산, 호수 이름등)을 가지고 위도와 경도의 좌표값을 얻는 것을 말한다.
반대로 위도와 경도값으로부터 고유명칭을 얻는것은 리버스 지오코딩(reverse Geocoding)이된다.
geopy는 여러 유명한 Geocoding 웹 서비스를 위한 파이썬 client이다.
geopy를 사용하면 파이썬 개발자가 타사 지오코더 및 기타 데이터 소스를 사용하여 전 세계의 주소, 도시, 국가 및 랜드마크 좌표를 쉽게 찾을 수 있다.import geopy.distance #거리 계산해주는 패키지 사용
classgeopy.distance.vincenty(*args, **kwargs)
: Thaddeus Vincenty가 고안한 공식을 사용하여 두 점 사이의 측지(위도경도 정확한 위치?) 거리를 계산한다.
coords_jejusi = (33.500770, 126.522761) #제주시의 위도 경도
data['dis_jejusi'] = [geopy.distance.vincenty((data['latitude'].iloc[i],data['longitude'].iloc[i]), coords_jejusi).km for i in range(len(data))]
data의 위도 경도와 제주시의 위도경도의 거리를 계산한다. 여기서 km은 kilometers
'study > 인공지능' 카테고리의 다른 글
COCO dataset (0) | 2021.03.05 |
---|---|
[데이콘 스터디] 7주차_함수 정리 (2) | 2021.02.16 |
[데이콘 스터디] 5주차_함수 정리 (0) | 2021.01.27 |
[데이콘 스터디] 4주차_함수 정리 (0) | 2021.01.27 |
[데이콘 스터디] 2주차_ 함수 정리 (0) | 2021.01.27 |