파이썬 데이터분석 공부시작 1주차 개발일지 작성
리스트형 변수(배열변수)
a_list=['사과','배','감']
print(a_list[0])
print(a_list[1])
print(a_list[2])
a_list.append('귤') # 리스트형 변수에 값 추가하기
print(a_list[3])
딕셔너리형 변수
a_dict={'name':'정현','age':21} # (key:value 형태)
a_dict['height']=178 # 딕셔너리형에 키 추가
a_dict
# 리스트+딕셔너리 조합형 변수
a_list=[{'name':'정현','age':21},{'name':'민영','age':20}]
a_list[1]['name']
함수
def sum(a,b): # def는 함수를정의한다 sum은 함수이름(맘대로) 마지막엔 :로 끝낸다
return a+b #return은 ~로 변환시켜라
result=sum(1,2)
result
조건문
def is_adult(age):
if age > 20:
print('성인입니다')
else:
print('청소년이에요')
is_adult(30)
is_adult(20)
is_adult(10)
반복문
a_list=['사과','배','감'] # 리스트형 변수와 같이 잘 쓰임
for fr in a_list: # a_list 리스트변수 안에서 리스트순으로 차례대로 반복한다
print(fr)
ages=[18,19,20,21,22]
for age in ages:
is_adult(age)
스크래핑
# 스크래핑에 필요한 라이브러리 설치
!pip install bs4 requests # requests : 엔터를 치는 기능 # bs4 : 잘 솎아내는 기능
# 앞에 !표시는 없어도 되는데 표시한 이유는 파이썬 언어가 아니고 라이브러리를 설치하는 등 외부 언어임을 표시 (!을 안쓰면 계속 잘못쓴 문법이라고 빨간줄 표시됨)
# 크롤링 기본코드 (bs4라이브러리의 다큐먼트(document:사용설명서))
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query=삼성전자',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 태그정보 1개 가져오기
b = soup.select_one('#sp_nws1 > div.news_wrap.api_ani_send > div > a')
# select_one의 뜻 : selector로 가져 온 정보 1개만 태그로 넣기
#''안의 내용은 크롬개발자모드에서 엘리멘트의 특정 태그 부분을 선택 후 Copy>selector 한 부분
# selector의 복사정보 분석 : id가 sp_nws1인 태그의 하위, div태그 중 news_wrap api_ani_send클래스가 있는 div태그의 하위, div태그의 하위, a태그
b.text # a변수의 태그 내에서 텍스트 부분만 출력
b['href'] # 태그 내의 특정 옵션값만 출력
# 태그정보 여러개 가져오기
lis = soup.select('#main_pack > section > div > div.group_news > ul > li')
# select의 뜻 : selector로 가져 온 정보 여러개를 태그로 넣기 (배열변수)
# selector의 복사정보 분석 : id가 main_pack인 태그의 하위, section태그의 하위, div태그의 하위, div태그 중 group_news클래스가 있는 div태그의 하위, ul태그
# > li는 직접 적음 (뉴스들이 위 경로의 ul태그안에 li태그들로 리스트로 이루어짐)(li태그들은 여러개 들어있음)
for li in lis: # lis의 배열값을 차례로 li에 넣어 반복하겠다. 즉, li는 lis[0]~lis[n]과 같다
a = li.select_one('a.news_tit') # 각 배열값의 하위 태그 중 news_tit를 클래스로 가지고 있는 a태그 값을 b변수에 넣는다
print(a.text, a['href'])
스크래핑을 함수화 하기
!pip install bs4 requests
import requests
from bs4 import BeautifulSoup
def get_news(keyword): # 함수를 디파인한다 (함수이름:get_news, 함수내 변수이름: keyword)
# 그리고 함수에 넣을 부분 모두 선택 후 tab눌러서 띄어넣기한다
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(f'https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}',headers=headers) #문자열 값 앞에 f를 넣는다(중요) #삼성전자 대신 {keyword}를 넣는다
soup = BeautifulSoup(data.text, 'html.parser')
lis = soup.select('#main_pack > section > div > div.group_news > ul > li')
for li in lis:
a = li.select_one('a.news_tit')
print(a.text, a['href'])
get_news('현대자동차') # 함수의 변수를 현대자동차로 바꿔서 출력해봄
get_news('LG전자')
엑셀 다루기
# openpyxl 라이브러리 설치
!pip install openpyxl
# openpyxl 라이브러리의 다큐먼트 (기본코드)
# 엑셀을 내보내기
from openpyxl import Workbook
wb= Workbook()
sheet = wb.active
sheet['A1'] = '안녕하세요!'
wb.save("샘플파일.xlsx")
wb.close()
# 엑셀을 읽어오기 (엑셀을 강의예제에 맞게 직접 수정해서 넣음)
# NO 상품명 가격
# 1 사과 100
# 2 배 200
# 3 감 500
# 4 딸기 1000
import openpyxl
wb = openpyxl.load_workbook('과일.xlsx')
sheet = wb['Sheet'] #시트이름
sheet['A1'].value #셀위치
rows = sheet.rows #rows의 배열변수에 sheet변수(엑셀시트)의 각 행들의 모든 열 값을 넣는다. ([0]은 1행의 모든열값, [1]은 2행의 모든열값)
for row in rows: #배열변수를 풀기
print(row[0].value,row[1].value,row[2].value)
스크래핑 + 엑셀 (날짜,파일명바꾸기,압축)
!pip install bs4 requests
!pip install openpyxl #엑셀부분
#오늘 날짜 가져오기 문법 (밑에 넣기때문에 지워도됨)
from datetime import datetime
datetime.today().strftime("%Y-%m-%d")
#스크래핑 정보를 엑셀로 내보내는 함수 정의 (함수의 정의일뿐이라 나중에 함수를 입력해야 실행됨)
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook #엑셀부분
from datetime import datetime #날짜부분
def get_news(keyword):
wb= Workbook() #엑셀부분
sheet = wb.active #엑셀부분
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(f'https://search.naver.com/search.naver?where=news&ie=utf8&sm=nws_hty&query={keyword}',headers=headers) #문자열 값 앞에 f를 넣는다(중요) #삼성전자 대신 {keyword}를 넣는다
soup = BeautifulSoup(data.text, 'html.parser')
lis = soup.select('#main_pack > section > div > div.group_news > ul > li')
for li in lis:
a = li.select_one('a.news_tit')
row = [a.text, a['href']] #row라는 변수에 각 정보를 저장 #[]로 배열지정해서 1행,2행으로 입력됨
sheet.append(row) #엑셀시트에 row값을 반복추가
#위는 다큐먼트에 지정되어 있는 기초문법
today = datetime.today().strftime("%Y-%m-%d") #날짜부분
wb.save(f"news/{today}_{keyword}.xlsx") #엑셀부분
#이름도 문자열 변수로 설정 #{}문자열 넣을려면 앞에 f필수
#news/는 news폴더안에 넣기 (폴더는 미리 만들어줘야함)
wb.close() #엑셀부분
keywords = ['삼성전자','LG에너지솔루션','SK하이닉스','NAVER','삼성바이오로직스','삼성전자우','카카오','삼성SDI','현대차','LG화학','기아','POSCO홀딩스','KB금융','카카오뱅크','셀트리온','신한지주','삼성물산','현대모비스','SK이노베이션','LG전자','카카오페이','SK','한국전력','크래프톤','하나금융지주','LG생활건강','HMM','삼성생명','하이브','두산중공업','SK텔레콤','삼성전기','SK바이오사이언스','LG','S-Oil','고려아연','KT&G','우리금융지주','대한항공','삼성에스디에스','현대중공업','엔씨소프트','삼성화재','아모레퍼시픽','KT','포스코케미칼','넷마블','SK아이이테크놀로지','LG이노텍','기업은행']
for keyword in keywords: #여러 키워드 적용 방법
get_news(keyword)
#파일명 바꾸기
import os
path = '/content/news' #경로 변수화
files = os.listdir(path) #해당 경로의 파일들을 배열변수화
for name in files:
new_name = name.split('.')[0]+'(뉴스).xlsx'
#split은 변수의 문자열을 특정 문자를 기준으로 나누어 배열변수 값으로 바꾸는 기능
#name은 '2022-12-13_삼성전자.xlsx'
#name.split('.')은 ['2022-12-13_삼성전자', 'xlsx']
#name.split('.')[0]은 '2022-12-13_삼성전자'
os.rename(f'/content/news/{name}',f'/content/news/{new_name}') #이름바꾸기
#압축하기
!zip -r /content/files.zip /content/news
이미지 스크래핑
!pip install bs4 requests
!pip install openpyxl
import openpyxl
import urllib.request #이미지 다운받기 (1/3) : 기본설정
wb = openpyxl.load_workbook('관리종목.xlsx')
sheet = wb['종목']
rows = list(sheet.rows)[1:]
for row in rows:
stockname = row[0].value #관리종목 파일의 1행이 주식이름
stockcode = row[1].value #관리종목 파일의 2행이 주식코드
url = f'https://ssl.pstatic.net/imgfinance/chart/item/area/year3/{stockcode}.png' #이미지 다운받기 (2/3) : 이미지 url
urllib.request.urlretrieve(url, f"stock/{stockname}.png") #이미지 다운받기 (3/3) : 이미지이름 및 다운위치
!zip -r /content/stockimages.zip /content/stock
'개발일지' 카테고리의 다른 글
웹프로그래밍 - 파이썬 API다루기, 크롤링, DB처리 3주차 정리 (0) | 2022.12.19 |
---|---|
파이썬 데이터분석 3주차 정리 (OpenDart의 API다루기) (0) | 2022.12.18 |
웹프로그래밍 - jQuer, Ajax 기초 2주차 정리 (0) | 2022.12.17 |
웹프로그래밍 - HTML/CSS/자바스크립트 기초 1주차 정리 (0) | 2022.12.15 |
파이썬 데이터분석 2주차 정리 (0) | 2022.12.14 |