오늘은 전 세계의 모든 날씨 정보 등을 가지고 있는 OpenWeatherMap을 사용해서 서울의 날씨정보에 대해 알아보려고 합니다.

 

일단 앞서 OpenWeatherMap을 사용하려면 개발자 등록을 하고 API키를 발급받아야 합니다.

 

http://openweathermap.org/ 에 가셔서 가입을 누르시면 어디에 사용할 지 물어보는데 적당한 답변을 주시고 OK버튼을 눌러주세요 그리고 오른쪽 상단에 본인 아이디를 누르시면 여러가지 메뉴가 나오는데 거기서 [My API Keys]라는 탭에서 API 키를 확인하실 수 있습니다.

 

제 API key는 개인정보 보호를 위해 지웠지만 다음과 같이 key를 얻을 수 있고, 이 key를 사용하여 데이터를 가져올 수 있습니다.

 

OpenWeatherMap은 기본적으로 유료 API이지만 현재 날씨, 5일까지의 날씨는 무료로 사용할 수 있습니다. 다만 무료로 사용시 1분에 60번만 호출할 수 있습니다. 실제 애플리케이션에 적용하는 것이 아닌 연습용으로는 충분할 것입니다.

 

 

 

 

 

 

1. request, json을 import 한 후, API키를 지정 후 requests를 활용하여 데이터 받아오기

 

그리고 url을 지정을 해 주는데, 저는 일단 한국에 있는 서울의 날씨 정보만 가져올 것이기 때문에 url에 직접 입력을 했습니다. url = 'http://api.openweathermap.org/data/2.5/weather?q=(도시,나라)&APPID=(openweathermap으로부터 발급받은 key)' 이런식으로 입력을 해줍니다.  

 

k2c는 화씨를 섭씨로 바꾸기 위한 간단한 수식이며, requests.get(url)을 이용하여 데이터를 받아옵니다. 결과가 200이 나왔다는 것은 정상적으로 데이터를 받아왔다는 것을 의미합니다.

 

2. jason을 이용한 결과값

 

받은 데이터는 풀어주면 다음과 같은 결과를 볼 수 있습니다.

 

데이터는 기본적으로 딕셔너리와 리스트로 되어있기 때문에 이를 잘 활용하면 원하는 데이터를 보기 좋게 추출할 수 있습니다.

 

3. 원하는 데이터 정리

 

data의 내용을 보면 coord는 위도 및 경도, weather 키 값은 id, 날씨, 설명, 아이콘 그리고 main에는 온도, 체감온도, 최저 및 최고온도, 압력, 습도 등등 그 밖에의 여러 정보들을 확인하실 수 있습니다.

 

저는 그 중 도시명, 날씨, 최저 및 최고 기온, 습도, 기압, 풍향, 풍속등만 추출하였고, 다음과 같은 결과값을 얻었습니다.

'AI > 데이터 수집' 카테고리의 다른 글

Selenium으로 스크레이핑하는 방법  (0) 2021.02.02
Selenium을 활용한 로그인  (0) 2021.02.02
requests 모듈의 메서드  (0) 2021.01.31
requests를 사용하여 로그인  (0) 2021.01.31
상대경로 및 절대경로  (0) 2021.01.26

1. Selenium을 불러올 때

from selenium import webdriver 는 기본적으로 공통적이지만, 사용하는 웹 브라우저에 따라 뒤에 입력값이 달리집니다.

Chrome Webdriver.Chrome
Internet Explore Webdriver.Ie
Firefox Webdriver.Firefox
Opera Webdriver.Opera

 

 

2. Selenium으로 DOM 요소를 선택하는 방법

 

2-1 DOM 내부에 있는 여러 개의 요소 중 처음 찾아지는 요소를 추출

 

메서드 이름 설명
find_element_by_id(id) id 속성으로 요소를 하나 추출
find_element_by_name(name) name 속성으로 요소를 하나 추출
find_element_by_css_selector(query) CSS 선택자로 요소를 하나 추출
find_element_by_xpath(query) XPath를 지정해 요소를 하나 추출
find_element_by_tag_name(name) 태그 이름이 name에 해당하는 요소를 하나 추출
find_element_by_link_text(text) 링크 텍스트로 요소를 추출
find_element_by_partial_link_text(text) 링크의 자식 요소에 포함돼 있는 텍스트로 요소를 하나 추출
find_element_by_class_name(name) 클래스 이름이 name에 해당하는 요소를 하나 추출

 

2-2 DOM 내부에 있는 모든 요소 추출

 

메서드 이름 설명
find_elements_by_css_selector(query) CSS 선택자로 요소를 어러 개 추출
find_elements_by_xpath(query) XPath를 지정해 요소를 여러 개 추출
find_elements_by_tag_name(name) 태그 이름이 name에 해당하는 요소를 여러 개 추출
find_elements_by_class_name(name) 클래스 이름이 name에 해당하는 요소를 여러 개 추출
find_elements_by_partial_link_text(text) 링크의 자식 요소에 포함돼 있는 텍스트로 요소를 여려 개 추출

 

 

3. Selenium으로 요소 조작하기

 

메서드 또는 속성 설명
clear() 글자를 입력할 수 있는 요소의 글자를 지움
click() 요소를 클릭
get_attribute(name) 요소의 속성 중 name에 해당하는 속성의 갑을 추출
is_displayed() 요소가 화면에 출력되는지 확인
is_enabled() 요소가 활성화돼 있는지 확인
is_selected() 체크박스 등의 요소가 선택된 상태인지 확인
screenshot(filename) 스크린샷을 찍음
send_keys(value) 키를 입력
submit() 입력 양식을 전송
value_of_css_property(name) name에 해당하는 CSS 속성의 값을 추출
id 요소의 id 속성
location 요소의 위치
parent 부모 요소
rect 크기와 위치 정보를 가진 딕셔너리 자료형을 리턴
screenshot_as_base64 스크린샷을 Base64로 추출
screenshot_as_png 스크린샷을 PNG 형식의 바이너리로 추출
size 요소의 크기
tag_name 태그 이름
text 요소 내부의 글자

 

 

4. Selenium 드라이버 조작

 

메서드 또는 속성 설명
execute_async_script(script, *args) 비동기 처리하는 자바스크립트를 실행
execute_script(script, *args) 동기 처리하는 자바스크립트를 실행
get(url) 웹 페이지를 읽어 들임
get_cookie(name) 특정 쿠키 값을 추출
get_cookies() 모든 쿠키 값을 딕셔너리 형식으로 추출
get_log(type) 로그를 추출(browser/driver/client/server)
get_screenshot_as_base64() base64 형식으로 스크린샷을 추출
get_screenshot_as_file(filename) 스크린샷을 파일로 저장
get_screenshot_as_png() PNG 형식으로 스크린샷의 바이너리를 추출
get_window_position(windowHandle='current') 브라우저 위치를 추출
get_window_size(windowHandle='current') 브라우저 크기를 추출
implicitly_wait(sec) 최대 대기 시간을 초 단위로 지정해서 처리가 끝날 때까지 대기
quit() 드라이버를 종료시켜 브라우저를 닫음
save_screenshot(filename) 스크린샷을 저장
set_page_load_timeout(time_to_wait) 페이지를 읽는 타임아웃 시간을 지정
set_script_timeout(time_to_wait) 스크립트의 타임아웃 시간을 지정
set_window_position(x,y,windowHandle='current') 브라우저의 위치를 지정
set_window_size(width, height, windowHandle='current') 브라우저의 크기를 지정
title 현재 페이지의 타이틀을 추출

 

'AI > 데이터 수집' 카테고리의 다른 글

API(Openweather에서 날씨정보 받아오기)  (0) 2021.02.04
Selenium을 활용한 로그인  (0) 2021.02.02
requests 모듈의 메서드  (0) 2021.01.31
requests를 사용하여 로그인  (0) 2021.01.31
상대경로 및 절대경로  (0) 2021.01.26

오늘은 Selenium을 활용하여 Daum에 접속하고, 로그인까지 할 예정입니다.

 

일단 사전에 준비해야 할 사항이 있습니다.

 

 

1. 크롬 버젼 확인 및 그에 맞는 드라이버 받아오기

 

구글 크롬을 기준으로 작업을 진행 할 예정입니다.

 

크롬에 들어가시면 오른쪽 상단에 가로로 점 3개가 찍힌 모양을 보실 수 있습니다. 

 

그것을 오른쪽 상단 점 세개 -> 도움말 -> Chrome 정보를 클릭하여 크롬의 버젼을 확인해 줍니다.

 

크롬 버젼을 확인 하셨으면 구글에서 "크롬 드라이버"를 검색하여 버젼에 맞는 크롬드라이버를 받아서 설치해줍니다.

 

 

2. 로그인 하고자 하는 홈페이지에서 정보 알아오기

 

저는 Daum홈페이지에서 작업을 할 예정입니다.

 

일단 Daum 홈페이지에 들어가서 Daum 아이디로 로그인을 클릭합니다.

 

그리고 나서 오른쪽 상단 -> 도구 더보기 -> 개발자 도구를 클릭하여 아이디, 비밀번호, 로그인 클릭 버튼의 속성을 확인합니다.

(아이디와 패스워드는 name으로 가져올 예정이며, 클릭을 위한 로그인은 id로 가져올 것입니다.)

 

3. 알아낸 정보로 Selenium을 이용하여 자동 로그인 하기

 

time은 여기서는 사용하지 않았지만, 기본적으로 많은 정보를 추출할 때 컴퓨터가 속도를 따라가지 못해 자료를 추출하지 못하는 경우가 있고, 홈페이지에 트래픽이 걸리는 경우도 있으므로 많은 정보를 크롤링 하실 경우에 time설정을 해주시는 걸 추천해드립니다.

 

webdriver와 Keys를 import 해줍니다.

driver에 크롬드라이브를 불러와주신 후, 다음 로그인 화면 페이지 url을 입력해줍니다.

 

그리고 Daum에 가입하셨을 때 등록하신 아이디 및 비밀번호를 USER, pw에 입력해주시고,

 

driver.find_element_by를 사용하여 2번에서 알아낸 정보를 입력해주고 실행을 해줍니다.

실행을 하면, 크롬 홈페이지가 자동으로 뜨면서 아이디 비밀번호 입력 후 로그인을 하면 작업이 완료가 됩니다.

1. HTTP에서 사용하는 GET, POST 등의 메서드

아래와 같이 요청을 한 후 text와 content 속성을 참조하면 내부 데이터를 확인이 가능합니다.

 

2. PUT/DELETE/HEAD 등의 요청을 위한 메서드

그 밖에 PUT/DELETE/HEAD 등의 요청을 위한 메서드도 있습니다.

 

3. 텍스트 및 바이너리 형식으로 데이터 추출

첫 번째 출력은 일반텍스트이며, 두 번째 출력은 b'----'형태입니다. 여기서 b'---'는 파이썬에서 바이너리를 의미합니다.

 

4. 이미지(바이너리 데이터) 파일 저장

위와 같이 바이너리 형식으로 데이터가 저장이 가능하며,

 

wikibook에서 PNG파일을 내려받고 text.png라는 이름으로 저장했습니다.

'AI > 데이터 수집' 카테고리의 다른 글

Selenium으로 스크레이핑하는 방법  (0) 2021.02.02
Selenium을 활용한 로그인  (0) 2021.02.02
requests를 사용하여 로그인  (0) 2021.01.31
상대경로 및 절대경로  (0) 2021.01.26
CSS 선택자  (0) 2021.01.25

일단 request모듈이 없으신 분들은

 

pip install requests를 입력하여 requests모듈을 설치해주시기 바랍니다.

 

requests를 사용하여 로그인하기에 앞서 간단히 원리에 대해 설명하도록 하겠습니다.

 

1. 로그인 과정 분석

 

일단 전 교육과정에서 많이 사용했던 한빛출판네트워크에서 작업을 하도록 하겠습니다.

 

일단 www.hanbit.co.kr에 접속하여,

 

마우스 오른쪽을 클릭하여 검사화면을 클릭하면 다음과 같은 화면이 나오는데

우선 들어가시면 기본적으로 Elements화면이 뜨는데 이거 말고 Network를 눌러주시고,

 

왼쪽 위 레코드 표시에 붉은 불이 들어오면 어떤 웹 페이지, 이미지, 스타일시트, 자바스크립트 파일등이 오가는지 볼 수 있습니다.

 

하지만 굉장히 많은 것들이 보이기 때문에 우리는 필요한 것만 보기위해 Doc를 눌러주고, Perserve log에 체크를 해줍니다. 

 

그 상태에서 로그인을 하시면,

다음과 같이 index.html -> login_pro.php -> login.html의 과정으로 작업이 진행된 것을 확인할 수 있습니다.

 

이 중 login_pro.php를 누르면 

이것의 Request Method는 POST이며, Request URL과 m_id, m_passwd등의 정보를 확인 할 수 있습니다.

 

login_proc.php는 로그인과 관련된 기능을 처리하는 곳이라는 뜻입니다.

 

로그인 과정을 분석했으니 이제 파이썬을 활용하여 로그인을 해보도록 하겠습니다.

 

2. 파이썬으로 로그인 후 정보 추출

일단 BeautifulSoup과 urllib.parse를 불러와주고, 가입했던 아이디와 비밀번호를 입력해줍니다.

그 후 session() 메서드를 사용해 세션을 시작하고 로그인 해줍니다.

(로그인을 위해 이전에 분석한 입력 양식의 name 속성과 값을 입력했습니다. 그리고 로그인 전용 URL에 POST 요청을 수행합니다.

로그인이 완료되면 마이페이지에 접근합니다.

그리고 마이페이지의 내용을 출력합니다.

(여기서 주의해야 할 것은 select_one으로 가져온 데이터에 <span></span>이 함께 들어있기 때문에 get_text()를 사용해 데이터 정리를 해서 깔끔하게 해줍니다.)

 

'AI > 데이터 수집' 카테고리의 다른 글

Selenium을 활용한 로그인  (0) 2021.02.02
requests 모듈의 메서드  (0) 2021.01.31
상대경로 및 절대경로  (0) 2021.01.26
CSS 선택자  (0) 2021.01.25
파이썬을 활용하여 데이터 받아오기(urllib을 활용)  (0) 2021.01.24

1. 상대 경로를 전개하는 방법

 

상대 경로를 전개할 때는 urllib.parse.urljoin()을 사용

 

from urllib.parse import urljoin

 

base = "http://example.com/html/a.html"

 

print(urljoin(base, "b.html"))

print(urljoin(base, "/hihi/c.html"))

print(urljoin(base, "./hehe/d.html"))

print(urljoin(base, "../haha/e.html"))

 

이렇게 4가지 경우를 만들어 프로그램을 돌릴 경우 결과는,

상대 경로

1. urljoin(base, "b.html")의 경우 html/b.html로 마지막의 부분(a.html -> b.html)이 변경.

 

2. urljoin(base, "/hihi/c.html")의 경우 html/a.html이 모두 사라지고 com뒤에 /hihi/c.html가 되어 경로 변경.

 

3. urljoin(base, "./hehe/d.html")의 경우  첫 번째와 마찬가지로 마지막 부분(a.html -> hehe/d.html)이 변경.

 

4. urljoin(base, "../haha/e.html")의 경우 두 번째와 마찬가지로 com뒤에 haha/e.html가 되어 경로가 변경.

 

2. 절대 경로를 설정하는 방법

from urllib.parse import urljoin

 

base = "http://example.com/html/a.html"

 

print(urljoin(base, "hoge.html"))

print(urljoin(base, "http://otherExample.com/wiki"))

print(urljoin(base, "//anotherExample.org/test"))

 

이렇게 3가지 경우를 만들어 프로그램을 돌릴 경우 결과는,

절대 경로

1. urljoin(base, "hoge.html")의 경우 hoge.html로 마지막의 부분(a.html -> hoge.htmll)이 변경. (상대 경로 설정)

 

2. urljoin(base, "/hihi/c.html")의 경우 http://example.com/html/a.html이 전부 사라지고 http://otherExample.com/wiki경로가 설정 

 

3. urljoin(base, "//anotherExample.org/test")의 경우 역시 http://example.com/html/a.html이 전부 사라지고 //anotherExample.org/test로 설정이 됩니다.

 

즉, 절대 경로는 //로 시작하거나 http://로 시작하는 경우 절대 경로로 설정된다는 것을 알 수 있습니다.

 

3. 예제 학습하기

앞에서 배운 내용을 토대로 python공식 홈페이지에서 파이썬 메뉴얼이 있는 홈페이지 경로를 다운 받아보겠습니다.

 

일단 홈페이지에 가서 확인을 먼저 하면, 

다음과 같이 되어있고,

 

import urllib.request as req

 

url = "https://docs.python.org/3.8/library/"

res = req.urlopen(url)

soup = BeautifulSoup(res, "html.parser")

links = soup.select("link[rel='stylesheet']")  # CSS선택자를 이용하여 links 설정

links += soup.select("a[href]")  # links에 a[href]에 있는 상대 경로들을 추가하여 links 설정

result = []  # result란 리스트를 만들어준다

 

# for문을 사용하여 경로를 설정해주고 이를 result에 저장

for a in links:

    href = a.aattrs['href']

    url = urljoin(base, href)

    result.append(url)

print(result)

 

다음과 같이 프로그램을 짜서 실행을 시킬 경우, result안에 홈페이지 경로들이 저장될 것입니다.

'AI > 데이터 수집' 카테고리의 다른 글

Selenium을 활용한 로그인  (0) 2021.02.02
requests 모듈의 메서드  (0) 2021.01.31
requests를 사용하여 로그인  (0) 2021.01.31
CSS 선택자  (0) 2021.01.25
파이썬을 활용하여 데이터 받아오기(urllib을 활용)  (0) 2021.01.24

데이터 수집을 하기 위한 방법 중 CSS 선택자를 활용하여 원하는 데이터를 가져올 수가 있는데요.

오늘은 CSS 선택자에 대해 알아보도록 하겠습니다.

 

1. 선택자 기본 서식

서식 설명
* 모든 요소를 선택
<요소 이름> 요소 이름을 기반으로 선택
.<클래스 이름> 클래스 이름 기반으로 선택
#<id 이름> id 속성을 기반으로 선택

 

2. 선택자들의 관계를 지정하는 서식

서식 설명
<선택자>, <선택자> 쉼표로 구분된 여러 개의 선택자를 모두 선택
<선택자> <선택자> 앞 선택자의 후손 중 뒤 선택자에 해당하는 것을 모두 선택
<선택자> > <선택자> 앞 선택자의 자손 중 뒤 선택자에 해당하는 것을 모두 선택
<선택자> + <선택자> 같은 계층에서 바로 뒤에 있는 요소를 선택
<선택자> ~ <선택자> 선택자1부터 선택자2까지의 요소를 모두 선택

 

3. 선택자 속성을 기반으로 지정하는 서식

서식 설명
<요소>[<속성>] 해당 속성을 가진 요소를 선택
<요소>[<속성>=<값>] 해당 속성의 값이 지정한 값과 같은 요소를 선택
<요소>[<속성>~=<값>] 해당 속성의 값이 지정한 값을 단어로 포함(띄어쓰기로 구분해서 완전히 포함)하고 있다면 선택
<요소>[<속성>|=<값>] 해당 속성의 값으로 시작하면 선택(이때 하이픈 기호로 구분해서 확인)
<요소>[<속성>^=<값>] 해당 속성의 값이 지정한 값으로 시작하면 선택
<요소>[<속성>$=<값>] 해당 속성의 값이 지정한 값으로 끝나면 선택
<요소>[<속성>*=<값>] 해당 속성의 값이 지정한 값을 포함하고 있다면 선택

 

4. 예제로 살펴보기

다음과 같은 HTML 구성이 있을 때,

 

html = '''

<ul id='fruits'>

    <li id='apple'>Apple</li>

    <li id='banana'>Banana</li>

    <li id='orange'>Orange</li>

    <li id='mango'>Mango</li>

    <li id='melon'>Melon</li>

</ul>

'''

 

mango를 추출하기 위해 사용할 수 있는 선택자를 살펴보겠습니다.

 

from bs4 import BeautifulSoup

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

 

fruit = lambda q: print(soup.select_one(q).string)

fruit("#mango")

fruit("li#mango")

fruit("ul > li#mango")

fruit("#fruits #mango")

fruit("#fruits > #mango")

fruit("#ul#fruits > li#mango")

fruit("li[id='mango']")

 

혹은

 

(주의) 0부터 시작할 경우 3은 4번째 요소가 된다

print(soup.select("li")[3].string)

print(soup.find_all("li")[3].string)

 

결과는

mango

mango

mango

mango

mango

mango

mango

mango

mango

가 될것입니다.

 

 

안녕하세요. 오늘은 파이썬을 활용하여 웹 사이트에 있는 데이터를 추출 해볼까 합니다.

 

우선 데이터를 받기 위해서 "urllib 라이브러리"를 사용할 예정입니다.

이 라이브러리를 이용하면 HTTP 또는 FTP를 사용해 데이터를 다운로드 할 수 있습니다.

 

urllib은 URL을 다루는 모듈을 모아놓은 패키지라고 할 수 있습니다.

 

그 중에서도 urllib.request 모듈은 웹 사이트에 있는 데이터에 접근하는 기능을 제공합니다.

 

데이터를 다운로드 하기 전에 데이터 url을 알아야 하는데요.

 

저는 데이터를 전부 받으면 용량이 너무 크기 때문에 간략히 네이버 로고정도만 다운로드를 할 예정입니다.

 

네이버 로고를 받기 위해서는,

 

1.  크롬 기준으로 오른쪽 위의 점 3개를 클릭 후 도구 더보기 -> 개발자 도구를 클릭하여 들어간다.

2. 빨간색 동그라미가 쳐진 부분을 클릭네이버 로고를 클릭해준다.

3. url을 복사한다.

이제 url을 알았으니 본격적으로 파이썬을 활용하여 이미지를 받도록 하겠습니다.

 

1. 파일 내 바로 저장하기

# 라이브러르 읽어 들이기
import urllib.request

 

# 원하는 url을 입력
url = "http://s.pastatic.net/static/www/mobile/edit/2020/1222/mobile_223827482666.png"


# 저장하고자 하는 파일 이름 입력
savename = "naver.png"

 

# 다운로드 실행(urlretrieve을 활용하여 바로 저장)
urllib.request.urlretrieve(url, savename)

 

이와 같이 코딩을 해서 실행해주면 다음과 같이 naver란 이름의 PNG파일이 저장됩니다.

 

2. 파이썬 메모리 위에 데이터를 올린 후 파일에 저장

# 라이브러르 읽어 들이기
import urllib.request

 

# 원하는 url을 입력
url = "http://www.kacn.org/image/main1.jpg"

 

# 저장하고자 하는 파일 이름 입력

savename = "natural.png"

 

# urlopen을 이용하여 메모리 위에 데이터를 올려놓음
natural_pic = urllib.request.urlopen(url).read()

 

# mode를 wb로하여 파일로 저장 (wb에서 w는 쓰기(write), b는 바이너리모드(binary를 의미))
with open(savename, mode="wb") as f:
    f.write(natural_pic)

이와 같이 코딩을 해서 실행해주면 다음과 같이 natural란 이름의 PNG파일이 저장됩니다.

 

 

만약 원하는 데이터가 바로 추출할 수 있다면 첫 번째 방법으로 처리가 가능하지만,

 

대부분의 데이터는 가공할 필요가 있기 때문에 2번째 방법이 더 많이 쓰이고 있습니다.

 

이상 파이썬을 활용하여 데이터를 가져오는 방법에 대하여 설명하였습니다.

'AI > 데이터 수집' 카테고리의 다른 글

Selenium을 활용한 로그인  (0) 2021.02.02
requests 모듈의 메서드  (0) 2021.01.31
requests를 사용하여 로그인  (0) 2021.01.31
상대경로 및 절대경로  (0) 2021.01.26
CSS 선택자  (0) 2021.01.25

+ Recent posts