1. 정규표현식

- 중간에 괄호로 표현한 정규표현식 부분을 2차원 배열형태로 불러오게 된다.

 

1) 정규표현식으로 데이터가져오기

import re

 

text = html.json()['records'][0]["pretty_link"]

group = re.findall("<a href=\"(.+)\"><img src=\"(.+)\" /> (.+)</a>", text)

 

print(requests.compat.urljoin(url, group[0][0]))

print(requests.compat.urljoin(url, group[0][1]))

print(group[0][2])

 

2) 입력 데이터

<div><a href="/places/default/view/North-Korea-165"><img src="/places/static/images/flags/kp.png" /> North Korea</a></div>

 

2. 네이버 로그인

- 암호화(js) => 토큰(Auth) => 암호화 => SSO => Session생성

- 이렇게 하느니  Selenium으로 하는 것이 낫다.

 

3. Selenium

1) 크롬 열기

from selenium import webdriver

ipy = "/Users/songsion/Desktop/DL/chromedriver"

browser = webdriver.Chrome(ipy)

 

2) 페이지 이동

url = "http://example.webscraping.com/places/default/search"

browser.get(url)

 

3) 객체 찾기

browser.find_element_by_id("search_term").clear()

browser.find_element_by_xpath("//input[@id='search_term']").send_keys("korea")

browser.find_element_by_xpath("//input[@id='search']").click()

 

4) 속성 가져오기

elements = browser.find_elements_by_xpath("//div[@id='results']//a")

print(elements[0].tag_name)

print(elements[0].text)

print(elements[0].get_attribute("href"))

print(browser.page_source)

 

5) handler 확인하기

print(browser.window_handles)

 

6) 닫기

browser.close()

 

7) 페이지를 다시 DOM으로

dom = BeautifulSoup(browser.page_source, “lxml”)

 

4. 쿠키

1) selenium을 통해 로그인한 결과의 쿠키를 저장해서 사용하기

from requests import Session

 

session = Session()

session.cookies.get_dict()

 

for cookie in browser.get_cookies():

    session.cookies.set(cookie['name'], cookie['value'])

    print(cookie)

 

5. 화면 전환

1) iframe

- 화면안에 새로운 dom의 구조로 표현되는 iframe값을 가져와서 사용

 

iframe = browser.find_element_by_css_selector("[id='loginForm']")

browser.switch_to_frame(iframe)

 

2) iframe 원복

browser.switch_to_default_content()

 

3) 마지막 화면으로 전환

browser.switch_to_window(browser.window_handles[-1])

 

4) 첫화면으로 원복

browser.switch_to_window(browser.window_handles[0])

 

6. Wait

- AJAX -> DATA요청(get) -> 브라우저가 받아서 -> DOM 업데이트 -> 화면에 그림(렌더링)을 기다려주기 위해 기다림

- 이렇게 페이지 이동이 끝나더라도 예외할 수 있도록 wait개체를 만들어주고 그 wait로 예외발생을 무시할 수 있다.

- 아래와 같이 하면 0.5초에 한번씩 총 10초동안 검사함

 

2) 개체를 찾을 때까지와 화면에 그릴 때까지

- 이 외에도 여러가지가 존재함

from selenium.common.exceptions import NoSuchElementException, ElementNotVisibleException

wait = webdriver.support.ui.WebDriverWait(browser, 10, 0.5, NoSuchElementException) # 찾을 때까지

wait2 = webdriver.support.ui.WebDriverWait(browser, 10, 0.5, ElementNotVisibleException) # 화면에 그릴 떄까지

 

3) Wait를 사용해서 기다리기

url = "http://example.webscraping.com/places/default/search"

browser.get(url)

input_search = browser.find_element_by_css_selector("[id='search_term']")

input_search.clear()

input_search.send_keys("korea")

 

browser.find_element_by_css_selector("[id='search']").click()

 

wait.until(lambda x:x.find_element_by_css_selector("[id='results'] a"))

 

for _ in browser.find_elements_by_css_selector("[id='results'] a"):

    print(_.tag_name)

    print(_.text)

    print(_.get_attribute('href'))

 

 

7. 다음 과제

- 아래와 같이 개체를 가져옴

 프로젝트 => 검색엔지(데이터), 문서분류, 스팸분류, 감성분석

for 검색엔진(데이터, 문서분류)

    

다음, 네이트 뉴스

경로, 제목, 요약

=> 파일경로, ____, 내용(.text)

파일경로 => 고유번호 + 카테고리(6)

 

'데이터 분석가 역량' 카테고리의 다른 글

day 10 ] 형태소 분석 개론  (0) 2019.05.14
day 9 ] 데이터 학습 개론  (0) 2019.05.13
day 6 ] parsing 익히기  (0) 2019.05.08
day 4] BeautifulSoup  (0) 2019.05.03
day 4] DOM  (0) 2019.05.02

+ Recent posts