본문 바로가기
코알라UNIV

4주차 데이터를 저장하는 방법

by 인듯아닌듯 2019. 11. 1.

시험이 끝나고, 오랜만에 다시만났다. 내색하진않았지만 알수없는 반가움이 있었다.

 

3주차에서 "크롤링한 데이터를 출력하기"까지 배웠다면, 4주차에서는 그 데이터를 앞으로 활용하기위해서 저장하는 방법에대해서 배웠다.

저장할 파일형식은 csv와 xlsx 두가지가 있다.

csv는 쉼표와 줄바꿈을 기준으로 데이터를 분류하는 파일로 가볍다는 특징이 있다.

(+11/28 csv는 int는 저장할 수 없고string만 저장가능)

xlsx는 우리가 정말 많이 사용하는 엑셀파일로써 활용할 수 있는 방법이 많다.

  csv xlsx
import X openpyxl
문자열 전처리 O (replace(",","")가 강제됨) X
시작과 끝

f=open("파일명","w')

f.write()

f.close()

 

wb=openpyxl.Workbook()

wb.sheet=active

wb.append([A,B,C])

wb.save("파일명")

앞으로 Data Science에 있어서 더 활용도가 높은 것은 xlsx일 것으로 예상한다. csv이 더 호환성이 좋다.

openpyxl의 추가기능 : load_workbook() 같은파일에 Data를 이어서 넣을 때. try and except과 함께 쓰임

try and except = if else와 작동방식이 완전히 같음

error가 나는 3가지경우 : 값이 없는 경우 , 2/0 , out of border

 

공부를 하면서 애를 먹었던 것은 csv파일 및 xlsx 파일이 UTF-8로 인코딩시에는 문자가 깨진다는 것이였다.

ANSI 형식이여야지 문자가 깨지지않았는데, 일반적으로는 문자가깨질 때는 UTF-8로 인코딩하면 된다고한다.

완전히 반대로 돌아가는 내 컴퓨터에 대해 의문점을 가졌었다.

 

이번 주차는 이전에 배운 내용에 저장하는 코딩만 더하면 되는 것이라, 배우는데에 어렵지는 않았다. 그래서 스터디에서는 다양한 페이지를 저장하는 실습을 진행해보았는데, 크롤링이 잘 되지않아서 막히는 경우가 빈번했다.

그 이유는 정말 다양했는데 그 케이스를 나열해 보자면,

1. html이 크롤링을 막음

2. html의 페이지마다 선택자가 잡기가 까다로울 때가 있음

3. 페이지가 유니코드가 아닌 바이트코드로 쓰여있어서 인코딩해주어야함.

4. 정적페이지보다 동적페이지(서버에서 값을 가져오는 경우)가 많아서 BeautiflSoup과requests를 이용한 크롤링으로는 값을 못가져오는 경우가 많았다.

5. 소스코드와 검사 창에 나오는 모습과의 빈번한 차이 ( Tag없음, 상하관계가 잘못표현됨, 동적페이지) -> 알아채기가 정말 힘들다...소스코드보는 것은 매우 고약하기 때문

 

멤버들이 막혔던 부분을 찾아보니 대부분은 4,5번에 해당됬었다. 앞으로도 꽤나 애를 먹을 부분이기는 하지만, 이제는  문제점을 알지못해서 같은 자리를 빙빙도는 것은 없고, 다른 방법을 찾을 수 있을 것이다.

 

Bugs 최신앨범 크롤링

Python source code
openpyxl을 통해서 xlsx파일로 저장!

이번 기회에 선택자에 여러 조건을 붙이는 것이 가능한 것을 다시 한번 확인했다

지금 알고 있는 선택자 조건은 :not(span) , :nth-child(1) 이다.

속성값을 가져올 때, 선택자로는 img([src])였고, 파이썬에서 불러오려고하니 select_one(img)[src]로 접근하니 가능하였다