본문 바로가기

2019년 혁신성장 청년인재 집중양성(빅데이터)/집중양성과정 프로젝트 01

6. 크롤링한 JSON 파일을 SQLITE DATABSE로 옮기기

1. 크롤링

 

1-1. twiiterscraper-master를 이용하여 '비트코인'에 대한 트윗을 수집했다.

...더보기

twitterscraper "비트코인"  --output=bit_kor4.json --lang ko  -bd 2012-01-01 -ed 2019-06-01

1-2. 그 결과 bit_kor4.json 파일을 얻을 수 있다.

 

 

2.  데이터베이스에 저장하기

 

import sqlite3

data = sqlite3.connect("bit_kor_4.sqlite")
cur = data.cursor()

2-1. sqlite3를 인스톨한다

2-2. bit_kor_4.sqlite가 있는지 확인하고 없으면 새로운 데이터베이스 파일을 생성한다.

2-3. cur을 통해 i/o를 만든다.

 

 

3.JSON 파일을 읽어오기

 

import json

bitkor = json.load(open('bit_kor4.json'))


columns = ['tweet_id', 'text', 'user_id', 'timestamp']

3-1. bit_kor4.json을 열어서 로딩하여 bitkor에 넣어논다.

3-2 columns를 통해 내가 원하는 데이터의 속성을 지정한다.

 

4. 원하는 데이터를 리스트에 모으기

for data2 in bitkor:
    keys= []
    for i in columns:
        keys.append(data2[i])

4-1. keys라는 리스트를 만든다.

4-2. 반복문을 사용하여, 컬럼 속에 있는 속성 값에 해당하는 값을 json파일의 딕셔너리에 있는 값을 keys에 추가시킨다.

 

* 예제로 봤던 코드는 keys를 튜플로 지정하고 한 줄로 코드를 짰었다. 하지만 나의 경우는 계속 인식이 되지 않아서 keys를 리스트로 지정하고 풀어썼다.

 

5. sql 문 사용하기(아래 코드 블럭이 이상하다 반복문의 연속이다.)

 

----continue
	cur = data.cursor()
    cur.execute("insert into test values (?,?,?,?)", (keys))
    data.commit()
    cur.close()
    print('ok')

5-1. cur를 통해 i/o를 열고

5-2. sql 구문을 실행한다. execute(query, keys))를 사용하면 ?의 자리에 맞게 값이 들어가게 된다.

5-3. commit을 하고 커서를 닫는다.

 

* 5-2에서 계속 오류가 떴다. 

라는 오류였는데, keys로 들어가는 값이 문자열로 인식이 되면 그렇다고 한다. 예를 들어 star라는 문자열이 'star'로 인식되는 것이 아니라 's', 't', 'r', 'a'로 인식 되는 문제였다. 

 

또, sql문에서 ?을 사용하는 부분에서 그냥 ?와 '?'을 넣는 것에 차이가 있는 것 같지만, 정확히 무엇의 차이가 있는지 모르겠다. 이것저것 바꾸다가 성공했다.

 

 

* 5-2문제를 해결 하고나니, 코드가 잘 실행되었지만, 데이터베이스가 갱신되지 않고 아무것도 추가되지 않았다. 

stackoverflow에 물어보니 cur.commit을 실행시켜보라고 했다. 하지만 cur.commit도 되지 않았다. commit은 커서가 아닌 데이터 자체에서 실행 시킬 수 있는 것이었다. 그렇기 때문에 나의 경우는 data.commit()을 해야한다.

 

6.