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 |