200302_TIL

|
  • 크롤링 공부 중
  • 크롤링 시 데이터 안 가지고 올 때, 간단히 확인하는 방법으로는 크롬 셋팅에서 자바스크립트를 비활성화 해서 확인해보자. 안갖고 오면 selenium을 사용해보자

200227_TIL

|
  • 일주일간 친구 결혼식 사회 준비로 살짝 패스했더니 시간이 일주일이 가버렸다…(핑계 ㅎㅎ..)
  • 오늘부터 학교형과 크롤링 관련 프로젝트를 하기 위해 크롤링 강의를 듣기 시작

크롤링 정리

|

크롤링

requests, lxml

사전 주의 사항

  • 대상 웹 페이지 조건 확인 - robots.txt
    • URL/robots.txt 검색으로 확인
  • 크롤러 분류 - 상태 유무, Javascript 유무
  • Request 요청 주의 할 점 - 서버 부하 고려
  • 콘텐츠 저작권 문제
  • 페이지 구조 변경 가능성 숙지

urllib 사용법

lxml

Get 방식

header connection : close는 세션이 없는 단방향 통신이기에

200218_TIL

|

11 sqlite 연동, 테이블 생성, 데이터 삽입, 삭제

|

11 데이터베이스 sqlite3

파이썬은 sqlite3 관련하여 기본 모듈을 제공한다.

import sqlite3
import datetime # 날짜 자동 생성 용도

삽입 날짜 생성

now = datetime.datetime.now() # 현재 시간 삽
print('now:', now)

# 사람이 보기 좋게 포맷함수로 바꿔준다.
nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')
print('nowDatetime : ', nowDatetime)

sqlite3 버전 보기

print('sqlite3.version:', sqlite3.version)
print('sqlite3.sqlite_version', sqlite3.sqlite_version)

DB 생성 & Auto Commit(<-> 롤백) 데이터베이스에 변경, 삽입 내용 영구적으로 반영할 때

conn = sqlite3.connect('./resource/database.db', isolation_level=None)
# Auto Commit

Cursor

파일처럼 db도 커서가 있다. 이를 통해 데이터를 읽을 수 있다.

c = conn.cursor()
print('Cursor Type : ', type(c))

테이블 생성(Data Type : TEXT, NUMERIC INTEGER REAL BLOB)

c.execute("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, username text, email text, \
phone text, website text, regdate text)")

데이터 삽입

c.execute("INSERT INTO users VALUES (1, 'Kim', 'Kim@naver.com', '010-1234-4567', 'Kim.com', ?)", (nowDatetime,))
# # ? 포맷인 듯, 튜플 형태로 입력해줘야함

c.execute("INSERT INTO  users(id, username, email, phone, website, regdate) VALUES (?, ?, ?, ?, ?, ?)", \
(2, 'Park', 'Park@daum.net', '010-1234-1233', 'Park.com', nowDatetime))

# Many 삽입 (튜플, 리스트)
userList = (
   (3, 'Lee', 'Lee@naver.com', '010-1234-1232', 'Lee.com', nowDatetime),
   (4, 'Cho', 'Cho@daum.net', '010-3333-3333', 'Cho.com', nowDatetime),
   (5, 'Yoo', 'Yoo@google.com', '010-4444-4444', 'Yoo.net', nowDatetime),
)
#
c.executemany("INSERT INTO users(id, username, email, phone, website, regdate) \
VALUES (?,?,?,?,?,?)", userList)

테이블 데이터 삭제

conn.execute("DELETE FROM users")
print("users db delete :", conn.execute("DELETE FROM users").rowcount) # 지움 다음에, 개수 출력

커밋 : isolation_level = None 일 경우 자동 반영(오토 커밋)

데이터베이스에 내용을 반영하려면 commit은 꼭 해줘야 한다.

conn.commit()

롤백

적용했던 내용을 다시 되돌리고 싶을 때 사용한다.

conn.rollback()

접속 해제

데이터베이스를 다 이용했으면 close()메소드로 닫아줘야 한다.

conn.close()