[PYTHON] 2. Web Crawler (2)

Fly High!·2020년 8월 24일
0

Python

목록 보기
2/7
post-thumbnail

목표

  1. 특정 사이트, 특정 글 스크랩
  2. 스크랩한 자료 DB에 저장
  3. 매주 추가되는 당첨번호 자동으로 스크랩하기

2. 스크랩한 자료 DB에 저장

1) MySQL DB Connection

import pymysql # pymysql 모듈 설치 후 import

db = pymysql.connect(
    host = 'localhost', # db가 존재하는 host
    user = 'root',
    password = '******',
    db = 'lotto', # 연결할 db 이름
    charset = 'utf8'
)

2) cursor 설정

# Connection으로부터 Cursor 생성
curs = db.cursor()

# Cursor 객체의 execute() 사용하여 insert, update, delete 문장을 db 서버와 연동
sql = 'query'
curs.execute(sql)

3) Commit

# 명시적으로 commit()을 호출
db.commit()

# 자동커밋 지정
autocommit=True

# DB 연결 닫기
db.close()

4) Code

from bs4 import BeautifulSoup
import requests
import pymysql

db = pymysql.connect(
    host = 'localhost',
    user = 'root',
    password = '******',
    db = 'lotto'
)

def lotto(page, max_pages):
    while page < max_pages:
        url = 'https://dhlottery.co.kr/gameResult.do?method=byWin&drwNo=' + str(page)
        req = requests.get(url)
        html = req.text
        bsObject = BeautifulSoup(html, "html.parser")
        arr = list()
        arr.append(page) # db에 회차 입력을 위한 append method
        for numbers in bsObject.select('div > div > div > div > p > span'):
            number = int(numbers.string)
            arr.append(number)
        insert_num(arr) # insert_num 함수로 이동
        page += 1
        
def insert_num(number):
    curs = db.cursor()
    
    # INSERT Query
    sql = "INSERT INTO lotto_numbers VALUES (%s ,%s, %s, %s, %s, %s, %s, %s)"
    curs.execute(sql, number)
    db.commit()
    print(curs.rowcount, "record inserted")

lotto(1, 926)
db.close()


1 ~ 925회차까지 DB에 입력된 것을 확인할 수 있음.

profile
Back-end, Python, Data

0개의 댓글