python의 MySql 연동 라이브러리 중 PyMySql 라이브러리를 사용하여 보았다. 


pip 명령어를 통해 python을 쉽게 설치할 수 있다.

$pip install PyMySql

터미널에서 python을 실행하여 

>>>import pymysql

을 통해 아래의 사진과 같이 에러가 나지 않는 경우 제대로 설치가 되었음을 확인할 수 있다.



PyMySql의 설치가 완료되면 아래의 예제와 같이 데이터베이스 서버에 접속하여 데이터를 변경하고, 원하는 데이터를 얻어올 수 있다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import pymysql.cursors
 
 
 
# 연결하고자 하는 데이터베이스의 정보를 입력
 
connection = pymysql.connect(host='MySql 서버 주소',
 
                             user='사용자ID',
 
                             password='패스워드',
 
                             db='데이터베이스 이름',
 
                             charset='utf8mb4',  # 데이터를 utf-8형식으로 받아오기위한 옵션
 
                             cursorclass=pymysql.cursors.DictCursor)  # 데이터베이스에서 받아오는 정보들을 딕셔너리 형태로 받아오기 위한 옵션
 
 
 
try:
 
    with connection.cursor() as cursor:
 
        # 데이터를 입력하기 위한 부분
 
        sql = "INSERT 쿼리"
 
        cursor.execute(sql, (쿼리의 %s 등 변수가 들어갈 자리))  # 쿼리와 튜플형식의 파라미터를 execute 메서드를 통해 db 서버에 전송
 
 
 
    # 데이터를 변경하는 경우 commit 메서드를 통해 변경 데이터를 바로 적용해 주어야 함
 
    connection.commit()
 
 
 
    # 데이터베이스의 데이터를 받아오기 위한 부분
 
    with connection.cursor() as cursor:
 
        # 데이터를 받아오기 위한 쿼리
 
        sql = "SELECT 쿼리"
 
        cursor.execute(sql, (쿼리의 %s 등 변수가 들어갈 자리))  # execute메서드를 통해 받아오고자 하는 데이터에 대한 쿼리를 db 서버에 전송
 
        result = cursor.fetchone()  # 데이터를 한 줄만 받아오기 위해서는 fetchone 메서드를 사용하고 여러 데이터를 받아오기 위해서는 fetchall 메서드를 사용하면 됨
 
        print(result)
 
 
 
finally:
 
    connection.close()
cs
반응형

MySql 홈페이지에서 mysql-python connector 라이브러리를 다운을 받는다. (클릭시 링크 연결)



설치가 끝난 후 터미널 창에서 python을 실행하여 라이브러리가 잘 설치 되었는지 확인을 할 수 있다.



 라이브러리를 모두 설치하면 데이터베이스에서 데이터를 받아오기 위해 데이터베이스에 접속을 해야 한다. mysql.connector.connect 매서드를 사용해서 연결하고자 하는 데이터베이스의 정보를 통해 데이터베이스에 접속을 하면 된다.

 연결과 관련하여 에러가 발생할 수 있으므로 에러 발생을 대비하여 예외처리를 해주는 것이 좋다.

 아래 코드 참고

import mysql.connector
from mysql.connector import errorcode

try:
#연결할 데이터베이스의 정보를 파라미터로 넘겨줌
cnx = mysql.connector.connect(user='유저아이디', password='유저패스워드',
host='mysql 서버 주소',
database='데이터 베이스 이름')

#데이터베이스와의 연결 상태를 확인하기 위한 부분
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
print("success connect")
cnx.close()





반응형

이전 글에서 문제가 있었던 한글 키워드로 트위터를 크롤링하는 경우 함수에서 한글 키워드를 인식하지 못하는 점을 해결하였다. 처음에는 .encode('utf-8')을 통해 한글 문자를 인코딩하여 인자로 넘겨주어어야 하지 않을까 생각을 해보았지만 찾아보다 보니 파이썬은 기본적으로 문자열을 unicode로 인식을 한다. 기본적인 한글 문자열을 입력하지 않고 unicode형식으로 인자를 넘겨주면 문제가 해결 될 것 같아서 u'한글'의 형식으로 수정을 하였더니 원하던 대로 정상적인 작동을 하였다.

# -*- coding: utf-8 -*-
# 한글 주석을 사용하기 위함
import tweepy

consumer_key = 'consumer_key'
consumer_secret = 'consumer_secret'
access_token = 'access_token'
access_token_secret = 'access_token_secret'

file = open('crawlData.txt', 'a')

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

dataLenght = 0

class MyStreamLstener(tweepy.StreamListener): #기존 tweepy의 streamListener의 오버라이딩
def on_status(self, status):
if dataLenght==1000000: #원하는 데이터의 수를 지정하기 위한 조건문
return
dataStr = status.text
print (dataStr) #데이터가 크롤링 되는 모습을 확인하기 위한 출력문
file.write(dataStr.encode('utf-8'))
++dataLenght

def on_error(self, status_code):
if status_code == 420: #stream에 연결을 하지 못하는 에러가 발생하는 경우 False를 반환
return False

if __name__ == '__main__':
myStreamListener = MyStreamLstener()
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)
#트위터 stream 중에 []배열 안에 들어간 단어들이 있는 문장만을 필터링 해줌
#파이썬은 기본적으로 문자열을 unicode로 인식함
#키워드를 u'한글'으로 하게 되면 기본적으로 인식하는 문자 형태인 unicode로 변환하여 읽음
#사용자들 간에 대화에서 많이 등장 할 만한 단어들인 "근데", "그냥", "했어"를 포함하는 트윗들을 읽어옴
myStream.filter(track=[u'근데', u'그냥', u'했어'])

추가적으로 

       dataStr = status.text
print (dataStr) #데이터가 크롤링 되는 모습을 확인하기 위한 출력문
file.write(dataStr.encode('utf-8'))
++dataLenght

이 부분에서 파일에 출력을 할 때 dataStr로 하면 에러가 났었다. 그래서 status.text를 확인해 보았더니 unicode형식인 status를 .text 모듈을 통해 해석을 하여 콘솔창에 출력을 해주는 것이었다. Unicode형식의 문자열인 DataStr을 'utf-8'형식으로 인코딩을 하여야 파일에 정상적인 출력이 된다.


파일에 출력된 결과물은 아래의 사진과 같이 나타난다.

대량의 구어체 데이터를 수집할 수 있어 좋지만 트위터의 특성상 은어 및 비속어도 많은 문제점들이 있어서 학습에 사용할 수 있을 지는 좀 미지수이다. 데이터를 정제하는 방법을 사용하던지 등의 해결책을 구해야 할 것 같다.

반응형

 Python에서 트위터 API를 사용하기 위해서는 Tweepy 모듈을 설치하여야 한다. 터미널창에서 

$pip install tweepy

 명령어를 통해 Tweepy 모듈을 설치한다.


 위의 사진과 같이 모듈 설치가 완료되면 각자 사용하는 파이썬 편집기에서 import tweepy를 통해 정상적으로모듈을 사용할 수 있다.



 이전 글에서는 사용자가 업로드한 트윗들을 출력하는 예제 프로그램이었지만 이번에는 실질적으로 데이터를 수집하기 위하여 원하는 단어가 있는 트윗들을 크롤링하는 코드를 짜보고자 한다. 우리 팀이 원하는 데이터인 구어체가 많이 포함 할 만한 단어로 "그냥", "근데", "했어"이 세가지 단어를 포함하는 트윗들을 크롤링 하고자 한다. (tweepy github를 참조 - https://github.com/tweepy/tweepy)

# -*- coding: utf-8 -*-
# 한글 주석을 사용하기 위함
import tweepy

consumer_key = 'consumer_key'
consumer_secret = 'consumer_secret'
access_token = 'access_token'
access_token_secret = 'access_token_secret'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

class MyStreamLstener(tweepy.StreamListener): #기존 tweepy의 streamListener의 오버라이딩
def on_status(self, status):
print (status.text)

def on_error(self, status_code):
if status_code == 420: #stream에 연결을 하지 못하는 에러가 발생하는 경우 False를 반환
return False

if __name__ == '__main__':
myStreamListener = MyStreamLstener()
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)
myStream.filter(track=['hungry']) #트위터 stream 중에 []배열 안에 들어간 단어들이 있는 문장만을 필터링 해줌


 위의 코드를 통해 원하는 keyword가 포함된 트윗들을 크롤링 할 수 있다. 아직 예제코드를 사용하여 크롤링을 하여 영어 키워드로만 크롤링을 하였다. 우리가 필요로 하는 데이터는 한글 데이터이므로 한글 keyword를 입력하니 예상대로 문제가 발생하였다. 인코딩으로 이 문제를 해결 할 수 있을 것 같으나 이 부분에 대해서 아직 해결을 하지 못하여서 더 찾아보고 공부가 필요하다. 그리고 한글을 사용하게 되면 지난 인턴기간 동안 있었던 인코딩 문제를 해결해야 할 것으로 예상이 된다.

반응형

 졸프팀에서 필요로하는 데이터는 우리가 일상생활에서 사용하는 줄임말  등의 일반 사용자들이 사용할만한 말들이 들어있는 구어체 데이터이다. 그러나 세종말뭉치 등의 데이터에서는 우리가 원하는 데이터를 얻기가 힘들었다. 사용자가 일상생활에서 사용하는 구어체 데이터를 얻기 위해 우리는 SNS를 활용하기로 하였다. 겨울방학동안 인턴 경험에서 배운 웹 크롤링 기술을 통해 데이터를 확보하고자 하였다. 우리가 사용했던 Scrapy나 Beautiful Soup을 사용 할 수도 있지만 트위터 같은 경우는 API를 제공하여 주기 때문에 Python에서 사용할 수 있는 API인 Tweepy를 사용하고자 한다.


 먼저 트위터 API를 사용하기 위한 권한을 얻기 위해 https://dev.twitter.com/index 에서 API Key를 발급받는 과정을 설명하려 한다.


1. 트위터 개발자 홈페이지에 접속하여 하단의  Tools 메뉴의 Manage my apps를 클릭한다. (https://dev.twitter.com/index)



 2. Create New App 버튼을 눌러서 새로운 App을 생성한다. (API Key를 발급 받은 적이 없으면 아무것도 나타나지 않는다.)


3. Application을 만들기 위한 정보들을 입력한다.




4. API Key 발급 완료.


 위와 같은 창이 나오면 API Key가 제대로 발급된 것이다. Python에서 Tweepy모듈을 사용하기 위해서 필요한 Consumer key와 access token을 확인하기 위해서는 Keys and Access Tokens메뉴를 들어가서 확인할 수 있다.

Access token은 처음엔 확인을 할 수 없다.

위의 화면에서 Create my access token을 클릭하면 확인 할 수 있다.



발급받은 API Key를 통해서 사용자가 twitter에 작성한 글들을 출력하는 간단한 예제를 만들어 보았다.

import tweepy

consumer_key = 'consemer_key'
consumer_secret = 'consumer_secret'
access_token = 'access_token'
access_token_secret = 'access_token_secret'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

public_tweets = api.home_timeline()
for tweet in public_tweets:
print tweet.text

반응형

+ Recent posts