현재 진행하고 있는 도서 대출 서비스 앱에서 도서 정보를 DB에 등록해놔야 하는데, 나는 이 작업을 내가 수작업으로 하기 귀찮았다.
그리하여 파이썬을 이용해 데이터 크롤링으로 도서 정보를 가져오고, 해당 도서를 DB에 추가하려고 제작하였다.
또, 이러한 크롤링, DB에 정보 추가 작업을 내가 수작업으로(직접 파이썬을 실행시키고, 산출물을 DB에 추가하는 작업) 하기 싫어서, Github Action을 이용하여 CI / CD가 되도록 하였다.
계획
네이버북에서 책이름, ISBN, 저자 정보를 제공해주는 것을 확인 했고, URL에서 bid 값만 변경해주면 다른 책 정보를 확인 할 수 있는 것을 검토했다.
그럼 이제 해야할 일은 다음과 같다.
웹사이트 크롤링
크롤링한 정보 github에 issue 생성(제대로 크롤링 됐는지 확인하기 위함)
크롤링한 정보 DB에 추가
startNumber (bid 시작 값) 갱신
나는 이와 같은 작업을 매번 내가 수행하기 귀찮아서 Github Action을 이용하여 자동으로 크롤링하고, 이슈 등록하고, DB에 추가 후, startNumber를 갱신하는 action을 생성하였다.
이전 게시물에선 1, 2 작업을 정리하였고, 이 게시물에서는 위 3, 4 작업을 정리할 계획이다.
필요한 라이브러리
나는 크롤링을 위해, 또, DB 업로드를 위해 다음 라이브러리들을 사용하였다.
requests==2.27.1bs4==0.0.1numpy==1.22.3PyGithub==1.51pymysql==1.0.2cryptography==37.0.2# 저번 포스트엔 없던 새 라이브러리 추가
DB에 데이터 업로드
DB에 접근하기 위해 파이썬 라이브러리인 pymysql를 사용하였다.
defdb_connect(arg_host,arg_user,arg_pass,arg_db,data):# set Value
con_host=arg_hostcon_user=arg_usercon_password=arg_passcon_db=arg_db# connect DB
print('Connect DB')conn=pymysql.connect(host=con_host,user=con_user,password=con_password,db=con_db,charset='utf8')cursor=conn.cursor()db_insert(cursor,data)db_save(conn)defdb_insert(cursor,data):print('insert Data')forrowinrange(len(data[0])):# 책 수량 0~10까지 난수 생성하여 넣음
quantity=np.random.randint(0,10)# insert Data
# 테이블명 변경 필요
sql='insert into book_status values(%s, %s, %s, %s)'vals=(data[0][row],data[1][row],data[2][row],quantity)cursor.execute(sql,vals)defdb_save(conn):# save conn
print('Save DB')conn.commit()# Close DB
print('Close DB')conn.close()
DB 업로드 확인
위와 같은 DB 업로드 코드를 구성하였고, 정상적으로 DB에 업로드 되는 것을 확인하였다. - Github에서 소스 보기
나의 경우 GitHub Actions에서 이와 같은 작업을 자동화 하기 때문에 argument로 DB 정보를 입력을 받아 처리하게 된다.