업무자동화
이성주
seongjoo@codebasic.io
pyautomate
>pip install pyautomate … .whl
Downloading …
…
Successfully installed
2
문단 스타일
• 정렬
 없음
 왼쪽
 중앙
 오른쪽
3
문단 스타일:문단 간격
• 문단 간격
• 이전 간격
• 이후 간격
4
문단 스타일: 줄 간격
5
문단 스타일: 들여쓰기
6
엑셀 파일
7
office.Excel()
데이터프레임
데이터프레임 DataFrame
A B C
0
1
2
3
4
5
8
.index
.columns
.values
슬라이드 레이아웃
표준 레이아웃 slide_layouts
제목 0
제목과 내용 1
섹션 제목 2
2단 내용 3
2단 비교 4
제목만 5
빈 슬라이드 6
내용과 설명 7
그림과 설명 8
모양 slide.shape
설명
자동 모양 텍스트 상자, 도형, 개체 틀 등
그림 그림 파일, 클립 아트
그룹 모양 집합
그래픽 프레임 테이블, 차트, 스마트 아트 다이어그램, 미디어 클립 등을 포
함할 수 있는 틀
선/연결점 선과 선을 연결하는 연결점
모양 속성
속성 단위
fill
left
top
width
height
해상도 2
해상도 1
주요 파이썬 모듈
모듈 설명 설치
webbrowser 브라우저에서 특정 페이지 조회. 표준 라이브러리
requests 웹페이지와 파일을 요청 pip install requests
BeautifulSoup HTML 문서에서 정보 추출 pip install beautifulsoup4
인터넷과 웹
요청
응답
서버클라이언트
URL
http://www.domain.com/python/automate/url.html
/
python
automate
url.html
네트워크 호스트 경로
HTTP GET과 POST 요청
GET: 정보 요청 POST: 정보 전송
HTTP GET과 POST 비교
GET POSTURL로
가야지
URL로 데이터를 가
져가야지
DATA
웹문서
요청
응답
서버클라이언트
웹문서 = HTML x CSS
HTML 소스
<html>
<body>
<h1>웹 스크래핑</h1>
<p>인터넷 데이터</p>
</body>
</html>
웹브라우저 출력
<html>
</html>
HTML 페이지 구조
• body
• 브라우저에서 출력
• head
• 웹페이지의 제목 등
• body 내용 출력에 필요한 설정
<head>
</head>
<body>
</body>
HTML 문법 기본
HTML 태그 구조
<태그명>내용</태그명>
<태그명 속성=값, …>내용</태그명>
<태그 속성=값, …>
예시
 <h1>제목1</h1>
 <p>본문</p>
 <img src=‘image.png’>
태그
• 태그는 대부분 쌍으로 이루어진
다.
• 태그 종류
• 시작: <태그명>
• 종료: </태그명>
• 태그는 속성을 가질 수 있다.
HTML 텍스트 파일 열기
• HTML 텍스트 파일을 바로 웹
브라우저에서 볼 수 있다.
• 웹서버가 없어도 된다.
• 외부에서는 조회 불가능
• URL
• 프로토콜: file://
• 경로: 파일시스템
브라우저에서 소스 보기
• 웹브라우저 메뉴의 개발자 도
구 활용
• 브라우저마다 메뉴가 다르다.
• 특정 요소의 HTML 태그 확인
가능
웹문서 “스냅샷” 파일 저장
http://www.naver.com file:///…/naver_com.html
CSS 문법
문법
선택자 {
속성: 값;
}
예시
p {
color: blue;
font-size: 12px;
}
CSS 선택자
CSS
body {
background-color: lightblue;
}
h1 {
color: white;
text-align: center;
}
p {
font-family: verdana;
font-size: 20px;
}
출력
CSS 선택자 조합
CSS
p { … }
.content p { … }
#footer p { … }
HTML
<div class="content">
<h1>웹문서</h1>
<p>HTML과 CSS</p>
</div>
<div id="footer">
<p>이성주</p>
</div>
CSS 선택자 조합 예시
CSS 선택자 예시 선택되는 요소
h1 모든 <h1>
#content id=“content” 속성을 갖는 모든 요소
.result class=“result” 속성을 갖는 모든 요소
div h1 <div> 내 모든 <h1>
div > h1 <div>에 직접 속한 <h1>
input[name] <input> 요소 중 name 속성을 갖는 것
input[type=“email”] <input> 요소 중 type=”email” 속성을 갖는 것
참조: http://www.w3schools.com/cssref/css_selectors.asp
웹브라우저 CSS 선택자 탐색 지원
* Chrome 50.0 개발자도구 예시 화면
원하는 요소 선택: Html.select()
태그목록 = html.select(선택자)
for 태그 in 태그목록:
…
요소의 속성 선택
태그목록 = html.select(선택자)
for 태그 in 태그목록:
텍스트 = 태그.text
if 속성명 in 태그.attrs:
값 = 태그.get(속성명)
• 요소.get(속성명)
• 특정 속성의 값
• 요소.attrs
• 속성 전체 정보
주요내용
• 구글 검색에서 자동으로 링크 수집
• 네이버 검색에서 자동으로 링크 수집
• URL의 구조와 데이터 전송
• CSS 선택자를 활용해 중첩된 HTML 태그에서 요소 선택
구글 검색 결과 링크 추출
구글 검색 결과 링크 HTML*
<h3 class="r">
<a href=url>…</a>
CSS 선택자: ".r a"
*임의의 시점에서 바뀔 수 있음
URL 구조와 구글 검색
http://google.com/search?q=키워드
호스트 경로 질의프로토콜
검색
HTTP GET
네이버 검색 결과 페이지 분석
사이트
지식백과
블로그
뉴스
웹문서
…
https://search.naver.com/search.naver?query=키워드
네이버 검색 결과 링크 CSS 선택자
섹션 HTML 선택자
사이트 <div class="nsite section">
<a href=url>
.nsite.section
블로그 <div class="blog section">
<a href=url>
.blog.section
뉴스 <div class="news section">
<a href=url>
.news.section
웹문서 <div class="webdoc section">
<a href=url>
.webdoc.section
import webbrowser
import webbrowser
webbrowser.open(url)
정리
• 구글과 네이버 검색
• 검색을 수행하는 URL 형식 파악
• 각 서비스의 웹문서 구조는 서로 다르다.
• 웹브라우저 페이지 소스보기 기능을 활용해 분석 필요
• webbrowser 모듈
• webbrowser.open(url)
• 매우 제한적인 상호작용
주요내용
• 웹브라우저와 상호작용
• 웹브라우저의 페이지 요소와 상호작용
• 웹브라우저의 현재 페이지에서 요소 선택
• 동적으로 변하는 웹페이지 정보 추출
webdriver
운영체제
python code
webdriver printer driver
제한
web.parse_html(url)
OK
우회
web.parse_html(url)
OK
chromedriver
• 크롬 브라우저용 드라이버
• 코드로 크롬 브라우저 조작
• 크롬 브라우저 버전에 따라 드
라이버 파일 선택
https://sites.google.com/a/chromium.org/chromedriver/
비동기식 로드 웹문서
웹브라우저 스냅샷
정리
• webdriver
• 파이썬 코드와 브라우저 상호 작용에 필요
• 크롬, 파이어폭스 지원
• 대상 웹브라우저 설치 필요
• 웹브라우저 버전에 맞는 드라이버 파일 필요
• 요소 선택
• browser.find_element_by_css_selector(CSS선택자)
주요내용
• 뉴스 웹사이트 기사 추출
• 관심 뉴스 웹사이트 전체에서 기사 추출
• 자동 로그인 수행
뉴스 웹사이트
<div id="jtbcBody">
…
</div>
CSS 선택자 = #jtbcBody
CSS 선택자 속성값 지정
CSS 선택자 예시 선택 태그 예시
[attribute] [href] <a href="…">
<a href="…" class="article">
[attribute="value"] [href="/python"] <a href="/python">
[attribute~="value"] [value~="python"] <option value="python">
<option value="automate python">
<option value="python data">
[attribute|="value"] [class|="main] <div class="main">
<div class="main container">
<div class="main-container">
[attribute^="value"] [href^="/post"] <a href="/post/1">
<a href="/post/python/1">
[attribute$="value"] [href$="python"] <a href="/post/python">
<a href="category/python">
[attribute*="value"] [href*="py"] <a href="python">
<a href="/post/python">
<a href="automate python">
관심 뉴스 웹사이트
제목 웹사이트 CSS선택자*
JTBC http://news.jtbc.joins.com/ #jtbcBody a[href^="http://news.jtbc.joins.com/html"]
KBS http://news.kbs.co.kr/common/main.html #container a[href^="/news/view.do?ncd"]
MBC http://imnews.imbc.com/ #middle a[href^="http://imnews.imbc.com/news"]
SBS http://news.sbs.co.kr/news/newsMain.do .w_inner a[href^="/news/endPage.do?news_id"]
*2017-01-17 기준
정리
• 뉴스 웹사이트 기사 추출
• 특정 형식의 URL 선택
• CSS 속성 선택 활용
• 관심 뉴스 웹사이트 전체에서 기사 추출
• 각 웹사이트별 CSS 선택자 분석 필요
• 텍스트 또는 엑셀 파일 활용
• 자동 로그인 수행
• 계정 정보 입력 상자 요소 선택
• 입력 상자 요소 값 채우기: WebElement.send_keys()
화면
pyautogui.size()
pyautogui.position()
pyautogui.moveTo(x, y, duration)
(0,0)
(0,1079)
(1919,0)
(1919,1079)
x
y

업무자동화를 위한 파이썬