안녕하세요. 언제나휴일입니다.
2020/11/16 - [빅데이터/빅데이터 with python] - [빅데이터 python] 웹 수집 로봇 만들기 - 1. 테이블 정의
2020/11/16 - [빅데이터/빅데이터 with python] - [빅데이터 python] 웹 수집 로봇 만들기 - 2. EHHelper 클래스 정의
2020/11/16 - [빅데이터/빅데이터 with python] - [빅데이터 python] 웹 수집 로봇 만들기 - 3. WebPage 클래스 정의
2020/11/16 - [빅데이터/빅데이터 with python] - [빅데이터 python] 웹 수집 로봇 만들기 - 4. WebPageSql 클래스 정의
이번에는 수집해야 할 웹 페이지 주소를 관리하는 Candidate테이블과 연동하는 클래스를 정의합시다.
1. 포함해야 할 라이브러리
파이썬과 MSSQL을 연동하기 위해 pymssql을 사용합니다.
데이터베이스와 연결을 담당하기 위해 작성한 SqlCon 클래스를 사용합니다.
수집한 웹 페이지는 수집 대상이 될 수 없습니다. 이를 위해 수집한 웹 페이지와 연동하는 WebPageSql을 사용합니다.
import pymssql
from SqlCon import SqlCon
from WebPageSql import WebPageSql
2. AddCandidate - 수집 후보 추가
이미 수집한 웹 페이지에 있는 주소인지 확인합니다.
이미 있다면 수집 후보가 될 수 없습니다.
그렇지 않다면 Candidate에 추가합니다.
class CandidateSql:
@staticmethod
def AddCandidate(url,depth):
cursor = SqlCon.Cursor()
if WebPageSql.FindWid(url)!=0:
return False
query = str.format("Insert into Candidate(url,depth) values('{0}',{1})",url,depth)
try:
cursor.execute(query)
SqlCon.Commit()
return True
except:
return False
2. GetCandidateID - 수집 후보 웹 페이지 주소 구하기
Candidate 테이블에서 일련 번호가 제일 작은 값을 반환합니다.
SQL에서 최소값을 찾을 때 MIN함수를 사용합니다.
@staticmethod
def GetCandidateID():
cursor = SqlCon.Cursor()
query = str.format("select MIN(id) from Candidate")
cursor.execute(query)
row = cursor.fetchone()
if row:
return row[0]
else:
return 0
3. Remove - 수집 후보 삭제
웹 수집 로봇에서 수집 후보 주소를 얻어가면 다시 수집하지 않기 위해 테이블에서 삭제를 합니다.
@staticmethod
def Remove(id):
cursor = SqlCon.Cursor()
query = str.format("delete from Candidate where id={0}",id)
cursor.execute(query)
SqlCon.Commit()
4. GetCandidate - 수집 후보 웹 페이지 구하기(수집 후보 삭제 포함)
Candidate 테이블에서 수집 후보 웹 페이지를 구하고 삭제하는 작업을 진행하는 메서드를 구현합시다.
앞에서 작성한 GetCandidateID 메서드를 호출합니다.
정상적으로 얻어왔다면(None도 아니고 0도 아님) 웹 페이지 주소(url)과 상대적 깊이(depth)를 구합니다.
검색이 성공하면 Candidate 테이블에서는 삭제합니다.
@staticmethod
def GetCandidate():
id = CandidateSql.GetCandidateID()
if id==None or id==0:
return "" ,-1
cursor = SqlCon.Cursor()
query = str.format("select url,depth from Candidate where id={0}",id)
cursor.execute(query)
row = cursor.fetchone()
if row:
CandidateSql.Remove(id)
return row[0],row[1]
else:
return "",-1
5. 전체 코드
#CandidateSql.py
import pymssql
from SqlCon import SqlCon
from WebPageSql import WebPageSql
class CandidateSql:
@staticmethod
def AddCandidate(url,depth):
cursor = SqlCon.Cursor()
if WebPageSql.FindWid(url)!=0:
return False
query = str.format("Insert into Candidate(url,depth) values('{0}',{1})",url,depth)
try:
cursor.execute(query)
SqlCon.Commit()
return True
except:
return False
@staticmethod
def GetCandidate():
id = CandidateSql.GetCandidateID()
if id==None or id==0:
return "" ,-1
cursor = SqlCon.Cursor()
query = str.format("select url,depth from Candidate where id={0}",id)
cursor.execute(query)
row = cursor.fetchone()
if row:
CandidateSql.Remove(id)
return row[0],row[1]
else:
return "",-1
@staticmethod
def Remove(id):
cursor = SqlCon.Cursor()
query = str.format("delete from Candidate where id={0}",id)
cursor.execute(query)
SqlCon.Commit()
@staticmethod
def GetCandidateID():
cursor = SqlCon.Cursor()
query = str.format("select MIN(id) from Candidate")
cursor.execute(query)
row = cursor.fetchone()
if row:
return row[0]
else:
return 0
'빅데이터 > 빅데이터 with python' 카테고리의 다른 글
[빅데이터 python] 웹 수집 로봇 만들기 - 7. WebRobot 가동 예 (0) | 2020.11.16 |
---|---|
[빅데이터 python] 웹 수집 로봇 만들기 - 6. WebRobot 클래스 정의 (0) | 2020.11.16 |
[빅데이터 python] 웹 수집 로봇 만들기 - 4. WebPageSql 클래스 정의 (0) | 2020.11.16 |
[빅데이터 python] 웹 수집 로봇 만들기 - 3. WebPage 클래스 정의 (0) | 2020.11.16 |
[빅데이터 python] 웹 수집 로봇 만들기 - 2. EHHelper 클래스 정의 (0) | 2020.11.16 |