[2021.07.05] 인턴 +126 How to add data to AWS DB (in Python)?
파이썬을 이용하여, AWS DB에 데이터를 넣는 방법에 대해 알아보도록 하자.
우선, AWS DB에 연동하기 위해 EC2-인스턴스를 만든 후, 가상머신에 접속하여, Mysql을 설치 해줘야 한다.
-> 개인정보를 위해, 퍼블릭 IPv4 DNS 값을 넣어주면 된다. (해당 계정은 IAM이 아닌 ROOT 계정임)
+@ VS CODE에서 mysql 사용하는 방법
- 해당 사진에서 VS CODE에서 mysql 설치하는 방법은 생략함(awstoolkit 설치하듯이, mysql 검색하여 설치하면 됨)
-> 설치를 했다면, 해당 페이지 처럼 Connect가 뜨는데, Host,Username,Port,Password,Databasenam 적어주면 됨
+@ VS CODE에서 mysql 사용법(데이터 삭제 & Commit)
-> 해당 모습은 AWS DB에 크롤링한 데이터가 들어간 것
-> 여기서 해당 table 값을 지울려면, 빨간색 동그라미에 친 것에 명령어를 쳐주면 됨
delete from 테이블명;
commit
ALTER TABLE Inquiry AUTO_INCREMENT = 1; # ★★★★★ auto increment reset 방법 ★★★★★
그런 다음에 데이터를 넣고, 재생버튼을 클릭하면 위에 같이 데이터가 들어가짐.
-------------------------------------------------------------------------------------------------------------------------------
<python 에서 mysql을 사용하기 위한 모듈>
import pymysql
<Python 에서 AWS DB 연동 및 설정 방법>
# AWS DB 연동
def get_db():
db = pymysql.connect(
host='EC2 인스턴스 - 퍼블릭 IPv4 DNS',
port=3306,
user='db_user',
passwd='db_passwd',
db='db_database_name',
charset='utf8'
)
return db
# AWS DB에 데이터 넣기
def insert_inquiry(data):
db = get_db()
mycursor = db.cursor()
try:
sql = "INSERT INTO Inquiry (OrgIndex,Segment,Title,content,regDate,Tag) VALUES (%s, %s, %s, %s, %s, %s)"
val = (data[0],delete_mystr(str(data[1])),str(data[2]),str(data[3]),str(data[4]),delete_mystr(str(data[5])))
mycursor.execute(sql, val)
db.commit()
db.close()
except Exception as e:
print('db insert inquiry error', e)
db.close()
---------------------------------------------------------------------------------------------------------------------------------
law-talk 크롤링 하면서, 꿀팁들
1. Tag 공백일 때, 데이터 공백 넣는 방법을 몰라서 3시간 정도 걸렸다. (해결 방법)
Tag = "";
# ★★★★★ Tag 가 비어있을 때, 인식을 못함, if문으로 ★★★★★
try :
Tag = driver.find_element_by_xpath("//*[@id='root-view']/div/div/div/question/div/div[1]/recommend-keyword/div").text
Tag = Tag.split("\n")
del Tag[0] # 관련 키워드 삭제
except Exception as e :
print("관련 키워드가 비어 있어서 except 처리")
print(e)
print("\n")
Tag = "" # ★★★★★ 여기서 Tag를 꼭 reset해줘야 해당 Tag들이 제대로 저장 됨 ★★★★★
pass
2. 웹 페이지에 scroll down(스크롤 다운 & 스크롤 내리기) 구현, 모든 곳에서 사용 가능
# for 문에 의해 scroll down 2번
def scroll_dowmn_page2():
for i in range(2): # adjust integer value for need
driver.execute_script("window.scrollBy(0, 200)")
time.sleep(0.5)
3. 2중 for문으로 코드 가독성 ↑
-> 바깥 for문 1번, 아래 for문 다 돈 후에, 다시 바깥 for문으로 돌아감
# 다음 페이지로 이동
for i in range(2,10):
keyword = '사기'
url = f'https://www.lawtalk.co.kr/cases?pg={i}&sort=recentAnswer&keyword={keyword}'
driver.get(url)
# 한 페이지에 있는 게시글 10개 데이터들을 추출
for i in range(1,11):
time.sleep(4)
case_board = driver.find_element_by_xpath(f"//*[@id='root-view']/div[2]/div[3]/section/div/div[4]/div/section/case-card[{i}]/a/div")
case_board.click()
inquirty_data() # law-talk-inquiry data extract & db data commit & close
driver.back() # 뒤로가기
time.sleep(3)
4. replace로 불필요한 [,],값 삭제
# "[","]" delete function
def delete_mystr(str):
str = str.replace("[","")
str = str.replace("]","")
return str
5. AWS DB 연동 및 AWS DB에 데이터 삽입
-> 중요한 것은, 크롤링 하다가 해당 컬럼에 값이 빌 때가 있는데, 그럴 땐 공백으로 꼭 채워줘야 함
안 채워주면, list index out of range 에러라는 문구 발생
# AWS DB 연동
def get_db():
db = pymysql.connect(
host='ec2-13-125-144-25.ap-northeast-2.compute.amazonaws.com',
port=3306,
user='admin',
passwd='1/zw;GytAwx*',
db='laws',
charset='utf8'
)
return db
# AWS DB에 데이터 넣기
def insert_inquiry(data):
db = get_db()
mycursor = db.cursor()
try:
sql = "INSERT INTO Inquiry (OrgIndex,Segment,Title,content,regDate,Tag) VALUES (%s, %s, %s, %s, %s, %s)"
val = (data[0],delete_mystr(str(data[1])),str(data[2]),str(data[3]),str(data[4]),delete_mystr(str(data[5])))
mycursor.execute(sql, val)
db.commit()
db.close()
# ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
# regdate (게시글 작성 시간)을 기준하여, 데이터를 추출한다.
# 1~59분전 , 0~23시간 전, 일 때 해당 소스코드는 데이터를 추출함
# 추출하지 못할 경우엔, 인덱스가 맞지않아, list index out of range 에러 발생
except Exception as e:
print("1일 이후(게시글 작성 시간)의 시간들은 저장하지 않기 때문에,regdate 인덱스가 NULL")
print("그러므로, list index out of range 에러 발생")
print('db insert inquiry error', e)
print("\n")
db.close()
댓글