관리 메뉴

SW

openpyxl 본문

대학교/Data

openpyxl

SWKo 2020. 1. 30. 20:19
20200130practice
In [138]:
from IPython.core.display import display, HTML
display(HTML("<style> .container{width:90% !important;}</style>"))
In [79]:
!pip install openpyxl
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
Requirement already satisfied: openpyxl in /Users/kosangwon/.conda/envs/practice2/lib/python3.7/site-packages (3.0.3)
Requirement already satisfied: jdcal in /Users/kosangwon/.conda/envs/practice2/lib/python3.7/site-packages (from openpyxl) (1.4.1)
Requirement already satisfied: et-xmlfile in /Users/kosangwon/.conda/envs/practice2/lib/python3.7/site-packages (from openpyxl) (1.0.1)
In [80]:
from openpyxl import Workbook # 파일 새로 만들 때
from openpyxl import load_workbook # 파일을 읽을 때
In [81]:
# 1. 워크북을 만든다.
wb = Workbook()
# 2. 워크 시트를 만든다.
ws = wb.active
In [14]:
# format_string
# 양식문자열
# 1. .format 메서드
# 2. % 문법
# 3. f 문자열
# 양식문자열 만드는 순서
# 1. 예시문자여 만들기
# 2. 데이터 자리 만들기
keyword = "겨울왕국2"
numbers = 122313123.21323
format_string = f"{keyword:@^10} - 기사 목록({numbers:5.2f})"
print(format_string)
@@겨울왕국2@@@ - 기사 목록(122313123.21)
In [ ]:
# 웹 페이지 : html, css, js
# html : 형태, 레이아웃, 컨텐츠
# 태그(tag) : container, empty
# <span>내용</span> : 태그 안에 다른 태그나 내용을 담을 수 있다, containter
# <img src="그림파일주소"> : 태그 단독 존재, empty
# <tagName 속성명="속성값" 속성명2="속성값2"></tagName>
# 속성 : id, class
# <span class="name_ep_title"> : 별명, 그룹명
# <p id="News_title"> : 주민번호

# css : 화면을 꾸미는 역할
# js : 동적인 부분을 담당, 새로운 데이터 불러오기
In [1]:
import requests
In [2]:
from bs4 import BeautifulSoup
In [7]:
keyword = input()
url = f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}"
시동
In [8]:
requests.get(url)
# http method
# 어떤 의도를 가지고 접근할 것인가?
# get : 정보를 얻어올 때 - 대부분의 주소치고 접근하는 페이지
# post: 정보를 전달할 때 - 회원가입, 글쓰기, 로그인, 결제
# head: 헤더 정보만 가지고 온다.
# options : 해당 페이지가 어떤 메서드를 지원하느냐?
# put : 자료를 업로드 할 때
# patch : 자료를 업로드 할 때 - 수정
# delete : 글 지울 때
Out[8]:
<Response [200]>
In [110]:
url = "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EB%A7%A8%EC%9C%A0+%EB%A7%A8%EC%8B%9C%ED%8B%B0"
req = requests.get(url)
if req.status_code != requests.codes.ok:
    print("접속실패")
    exit()
# 내용 파악
html = BeautifulSoup(req.text, "html.parser")
In [111]:
# 기사 제목, 링크, 요약, 언론사 이름
news_items = html.select('#sp_nws_all1')

for item in news_items:
    print(item.text)
    b = item.a.attrs['href']
    print(b)
    title = item.select_one('a._sp_each_title')
    link = title.attrs['href']
    description = item.select('')
    #print(description)
    n_company = item.select_one('._sp_each_source')
    print(title.text, link, description.text, n_company.text)
"""
selector
1. 단일
- 태그이름 : a
- id : #a
- class : .a
2. 복합
- a._sp_each_title     //태그 이름 나온 후 class 나와야 함. 순차적이어야 함
- a > p > div > .sp_each_title    //중간 경로 생략 불가(빠름)
- a p div .sp_each_title    //중간 경로 생략 가능(덜빠름)
"""
Out[111]:
'\nselector\n1. 단일\n- 태그이름 : a\n- id : #a\n- class : .a\n2. 복합\n- a._sp_each_title     //태그 이름 나온 후 class 나와야 함. 순차적이어야 함\n- a > p > div > .sp_each_title    //중간 경로 생략 불가(빠름)\n- a p div .sp_each_title    //중간 경로 생략 가능(덜빠름)\n'
In [135]:
# 1. 워크북을 만든다.
wb = Workbook()
# 2. 워크 시트를 만든다.
ws = wb.active

url = "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EB%A7%A8%EC%9C%A0+%EB%A7%A8%EC%8B%9C%ED%8B%B0"
req = requests.get(url)
if req.status_code != requests.codes.ok:
    print("접속실패")
    exit()
    
# 내용 파악
html = BeautifulSoup(req.text, "html.parser")
news_items = html.select("ul.type01 > li")
for row_num, item in enumerate(news_items, start=1):
    title = item.select_one('a._sp_each_title')
    print(title.text)

    #기사의 링크 주소를 찾아서 출력
    link = title.attrs['href']
    description = item.select('dd')[1]
    print(description.text)
    n_company = item.select_one('._sp_each_source')
    if n_company.select_one('i'):
        n_company.select_one('i').decompose()
    print(title.text, link, description.text, n_company.text)
    ws.append([row_num,
             title.text,
             link,
             description.text,
             n_company.text])
    
맨시티, 맨유 제치고 3시즌 연속 카라바오컵 결승행
준결승 2차전에서 맨시티, 맨유에 0-1 패배…1, 2차전 합계 3-2로 결승행 맨체스터 시티(이하 맨시티)가 잉글랜드 프로축구 지역 라이벌인 맨체스터 유나이티드(이하 맨유)를 따돌리고 3시즌 연속 카라바오컵 결승에...
맨시티, 맨유 제치고 3시즌 연속 카라바오컵 결승행 http://yna.kr/AKR20200130024000007?did=1195m 준결승 2차전에서 맨시티, 맨유에 0-1 패배…1, 2차전 합계 3-2로 결승행 맨체스터 시티(이하 맨시티)가 잉글랜드 프로축구 지역 라이벌인 맨체스터 유나이티드(이하 맨유)를 따돌리고 3시즌 연속 카라바오컵 결승에... 연합뉴스
[카라바오컵] 맨유, 맨시티 1-0 격파…결승행은 좌절
세르히오 아구에로에게 골을 내줬지만 오프사이드가 선언돼 다시 한숨 돌렸다. 경기 종료까지 추가골을 노린 맨유는 추가 득점에 실패하며 경기는 1-0 맨유의 승, 결승행 티켓은 맨시티가 챙겨갔다. 이준혁 온라인 기자
[카라바오컵] 맨유, 맨시티 1-0 격파…결승행은 좌절 http://sports.khan.co.kr/news/sk_index.html?art_id=202001300640003&sec_id=520401&pt=nv 세르히오 아구에로에게 골을 내줬지만 오프사이드가 선언돼 다시 한숨 돌렸다. 경기 종료까지 추가골을 노린 맨유는 추가 득점에 실패하며 경기는 1-0 맨유의 승, 결승행 티켓은 맨시티가 챙겨갔다. 이준혁 온라인 기자 스포츠경향
[스경X라인업] 맨시티-맨유 명단 공개…최정예 총력전
맨시티와 맨유는 30일 오전 4시 45분(한국시간) 영국 맨체스터의 에티하드 스타디움에서 2019-2020시즌 카라바오 컵(잉글랜드 리그컵) 4강 2차전을 치른다. 지난 1차전은 맨유 홈에서 맨시티가 3-1로 대승했다. 맨시티는...
[스경X라인업] 맨시티-맨유 명단 공개…최정예 총력전 http://sports.khan.co.kr/news/sk_index.html?art_id=202001300349003&sec_id=520401&pt=nv 맨시티와 맨유는 30일 오전 4시 45분(한국시간) 영국 맨체스터의 에티하드 스타디움에서 2019-2020시즌 카라바오 컵(잉글랜드 리그컵) 4강 2차전을 치른다. 지난 1차전은 맨유 홈에서 맨시티가 3-1로 대승했다. 맨시티는... 스포츠경향
맨유 잡은 맨시티, 역대 두 번째 리그컵 3연패?
하지만 지난 맨유 원정서 3-1 승리했던 맨시티는 1~2차전 합계 3-2로 지역 라이벌을 제압, 3년 연속 이 대회 결승 무대에 오르는데 성공했다. 1961년 출범한 EFL컵은 1부 리그부터 4부 리그까지 프로 팀들만 출전하는...
맨유 잡은 맨시티, 역대 두 번째 리그컵 3연패? http://www.dailian.co.kr/news/view/864805?sc=Naver 하지만 지난 맨유 원정서 3-1 승리했던 맨시티는 1~2차전 합계 3-2로 지역 라이벌을 제압, 3년 연속 이 대회 결승 무대에 오르는데 성공했다. 1961년 출범한 EFL컵은 1부 리그부터 4부 리그까지 프로 팀들만 출전하는... 데일리안
맨유 솔샤르 감독 “6주 사이에 맨시티 원정 2승, 선수들 자랑스럽다”
잉글랜드 프리미어리그(EPL) 맨체스터 유나이티드(이하 맨유) 올레 군나르 솔샤르 감독이 맨체스터 시티(이하 맨시티) 전 승리에도 불구하고 카라바오컵(EFL컵) 결승 진출에 실패한 아쉬움을 표했다. 맨유는 30일(이하...
맨유 솔샤르 감독 “6주 사이에 맨시티 원정 2승, 선수들 자랑스럽다” http://sports.donga.com/3/all/20200130/99457429/2 잉글랜드 프리미어리그(EPL) 맨체스터 유나이티드(이하 맨유) 올레 군나르 솔샤르 감독이 맨체스터 시티(이하 맨시티) 전 승리에도 불구하고 카라바오컵(EFL컵) 결승 진출에 실패한 아쉬움을 표했다. 맨유는 30일(이하... 스포츠동아
맨시티팬들, 맨유팬 향해 '뮌헨참사' 조롱 논란(英BBC)
이를 라이벌인 맨시티 팬들이 조롱하자 일부 맨유 팬들은 참지 못하고 경기가 끝난 뒤 좌석 일부를 뜯어 홈팀 응원석 쪽으로 던진 것으로 전해졌다. 이같은 사건에 양 팀 감독들은 덩달아 우려를 감추지 못했다. 펩...
맨시티팬들, 맨유팬 향해 '뮌헨참사' 조롱 논란(英BBC) http://moneys.mt.co.kr/news/mwView.php?no=2020013011288015882 이를 라이벌인 맨시티 팬들이 조롱하자 일부 맨유 팬들은 참지 못하고 경기가 끝난 뒤 좌석 일부를 뜯어 홈팀 응원석 쪽으로 던진 것으로 전해졌다. 이같은 사건에 양 팀 감독들은 덩달아 우려를 감추지 못했다. 펩... 머니S
맨시티 서포터, 맨유 팬들 향해 뮌헨 참사 조롱… 과르디올라 감독 분노
우리는 경쟁을 원하지만 높은 수준의 정신을 유지해야 한다. 우리가 이런 일을 근절해야 한다"고 전했다. 한편 맨시티와 맨유는 구단 경기장 CCTV를 통해 사건을 조사할 전망이다.
맨시티 서포터, 맨유 팬들 향해 뮌헨 참사 조롱… 과르디올라 감독 분노 http://www.sisafocus.co.kr/news/articleView.html?idxno=231182 우리는 경쟁을 원하지만 높은 수준의 정신을 유지해야 한다. 우리가 이런 일을 근절해야 한다"고 전했다. 한편 맨시티와 맨유는 구단 경기장 CCTV를 통해 사건을 조사할 전망이다. 시사포커스
솔샤르 ‘펩 상대 원정 2승’…무리뉴·클롭 이후 처음 [맨시티 맨유]
솔샤르 감독은 맨유를 지휘하여 2019-20 잉글랜드 프리미어리그(EPL) 16라운드(2-1승)에 이어 과르디올라 감독이 이끄는 맨시티를 맞아 원정경기 2연승을 거뒀다. 영국 공영방송 BBC에 따르면 주제 무리뉴(57·포르투갈)...
솔샤르 ‘펩 상대 원정 2승’…무리뉴·클롭 이후 처음 [맨시티 맨유] http://mksports.co.kr/view/2020/96038/ 솔샤르 감독은 맨유를 지휘하여 2019-20 잉글랜드 프리미어리그(EPL) 16라운드(2-1승)에 이어 과르디올라 감독이 이끄는 맨시티를 맞아 원정경기 2연승을 거뒀다. 영국 공영방송 BBC에 따르면 주제 무리뉴(57·포르투갈)... MK스포츠
[S트리밍] 맨유 솔샤르 감독, "맨시티 원정서 2연승…선수들 자랑스럽다"
비록 결승행에는 실패했지만 맨유로서는 의미있는 한 판이었다. 지난 리그 경기에 이어 또 한 번 그들의 홈에서 맨시티를 제압했기 때문이다. 이날 승리는 네마냐 마티치의 퇴장으로 수적 열세에서 만든 승리라...
[S트리밍] 맨유 솔샤르 감독, "맨시티 원정서 2연승…선수들 자랑스럽다" http://www.stnsports.co.kr/news/articleView.html?idxno=110967 비록 결승행에는 실패했지만 맨유로서는 의미있는 한 판이었다. 지난 리그 경기에 이어 또 한 번 그들의 홈에서 맨시티를 제압했기 때문이다. 이날 승리는 네마냐 마티치의 퇴장으로 수적 열세에서 만든 승리라... STN 스포츠
[EFL컵 REVIEW] 아스톤 빌라, 레스터 꺾고 결승행…맨유 또는 맨시티 상대
아스톤 빌라가 레스터 시티를 따돌리고 10시즌 만에 잉글랜드 컵대회 결승 진출 티켓을 거머쥐었다. 아스톤 빌라는 29일(한국시간) 영국 버밍엄 빌라파크에서 열린 2019-20 카라바오컵(잉글랜드 리그컵) 준결승전에서...
[EFL컵 REVIEW] 아스톤 빌라, 레스터 꺾고 결승행…맨유 또는 맨시티 상대 http://www.spotvnews.co.kr/?mod=news&act=articleView&idxno=341752 아스톤 빌라가 레스터 시티를 따돌리고 10시즌 만에 잉글랜드 컵대회 결승 진출 티켓을 거머쥐었다. 아스톤 빌라는 29일(한국시간) 영국 버밍엄 빌라파크에서 열린 2019-20 카라바오컵(잉글랜드 리그컵) 준결승전에서... 스포티비뉴스
In [136]:
wb.save("navernews.xlsx")
In [64]:
# 리스트, 딕셔너리, 튜플, 셋
# 문자열, 리스트, 튜플 - 순서가 있는 형태
# 딕셔너리, 셋
# 만들기, 값 읽기, 변경, 추가, 삭제, 유틸리티
# 리스트
test_list = list()
test_iist = []
test_list = [1,2,3,4,5,3.14,"hi","hello"]
test_list[-1] # index - 순번 - 순서번호
test_list.append(99)
test_list.insert(5, 1024)

len(test_list)
# test_list.sort() # 숫자로 된 원본을 정렬
test_list.count(1) # 중복 요소의 개수
Out[64]:
1
In [59]:
test_list
Out[59]:
[1, 2, 3, 4, 5, 1024, 3.14, 'hi', 'hello', 99]
In [70]:
numbers = []
# 1개를 처리하는 구문 작성
while True:
    number = input("정수 : ")
    if not number:
        break
    number = int(number)
    numbers.append(number)

# total = sum(numbers)
total = 0
for number in numbers:
    total += number
print("sum : ", total)
정수 : 33
정수 : 33
정수 : 33
정수 : 
sum :  99
In [ ]:
url = "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EB%A7%A8%EC%9C%A0+%EB%A7%A8%EC%8B%9C%ED%8B%B0"
req = requests.get(url)
if req.status_code != requests.codes.ok:
    print("접속실패")
    exit()
# 내용 파악
html = BeautifulSoup(req.text, "html.parser")
In [ ]:
# 함수 만들기
# 함수는 사용자 정의 명령
# 함수 -> y = f(x)
# 입력 -> 처리 -> 출력이 있는 블랙박스
"""
처리
입력 - 처리
처리 - 출력
입력 -처리 -출력
함수에서 입력 : 매개변수 - 옵션
함수에서 출력 : 반환값 - 처리한 결과
"""
In [114]:
def test():
    print("hi")
    print("hello")
    print('WEfw')
In [115]:
test()
hi
hello
WEfw
In [116]:
def test(count, name="philip", age=33):
    print(count, name, age*3)
    return 33
In [120]:
result = test(3, "jak3", 90)
3 jak3 270
In [121]:
print(result)
33
In [126]:
def add(num1, num2):
    return num1 + num2
In [127]:
add(3,5)
Out[127]:
8
In [128]:
print(add(3, 5))
8

'대학교 > Data' 카테고리의 다른 글

matplotlib  (0) 2020.02.01
Kaggle [Titanic Data Analysis]  (0) 2020.02.01
json  (0) 2020.01.30
pandas  (0) 2020.01.30
Beautifulsoup  (0) 2020.01.30
Comments