이전에 검색어가 포함된 제목을 가진 공모전을 찾아 페이지네이션 형태로 제공하도록 기능을 추가하였다. 이번에는 공모전 데이터가 오류 없이 모두 스크래핑되는지 확인하고, 웹페이지 디자인 마무리 작업을 진행하려 한다.
데이터 스크래핑
이전에 작성했던 코드로 플랫폼 별 데이터 수집을 진행하였다. 실행한 코드는 다음과 같다.
if __name__ == "__main__":
title, url, application_start, application_end = scraping_linkcarrer()
save_data_to_dataframe('linkcarrer', title, url, application_start, application_end)
save_csv_to_database("linkcarrer.csv")
title, url, application_start, application_end = scraping_wevity()
save_data_to_dataframe('wevity', title, url, application_start, application_end)
save_csv_to_database("wevity.csv")
title, url, application_start, application_end = scraping_thinkgood()
save_data_to_dataframe('thinkgood', title, url, application_start, application_end)
save_csv_to_database("thinkgood.csv")
링커리어
데이터 수집이 모두 완료된 것을 확인하였다.
위비티
데이터 수집이 모두 완료된 것을 확인하였다.
씽굿
데이터 수집이 모두 완료된 것을 확인하였다.
에러
링커리어 csv 파일을 데이터베이스에 저장하던 중 에러가 발생하였다. 이유는 데이터베이스에 저장을 할 때 올바른 형식이 아닐 경우 에러 처리가 안돼있었다. 확인해 보니 3개의 데이터의 날짜가 마감 일자가 "상시 모집"인 것을 확인하였다. 그러나 시작 날짜는 모두 적혀 있었으므로 마감 일자가 존재하지 않으면 "9999-12-31"로 표시하기로 결정하였다.
코드
def save_csv_to_database(csv_file):
with open(csv_file, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader) # 첫 번째 행은 헤더이므로 건너뜁니다.
for row in reader:
platform = row[0]
title = row[1]
url = row[2]
application_start = datetime.strptime(row[3], "%Y-%m-%d")
application_end = datetime.strptime(row[4], "%Y-%m-%d")
Competition.objects.create(platform=platform, title=title, url=url, application_start=application_start, application_end=application_end)
수정한 코드
마감 일자에 if 문을 추가하여 올바른 형식이 아니면 "9999-12-31"로 저장되도록 수정하였다. 그리고 함수를 재실행하여 데이터베이스에 저장되도록 하였다.
def save_csv_to_database(csv_file):
with open(csv_file, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader) # 첫 번째 행은 헤더이므로 건너뜁니다.
for row in reader:
platform = row[0]
title = row[1]
url = row[2]
application_start = datetime.strptime(row[3], "%Y-%m-%d")
application_end = datetime.strptime(row[4], "%Y-%m-%d") if row[4].replace('-', '').isdigit() else datetime.strptime("9999-12-31", "%Y-%m-%d")
Competition.objects.create(platform=platform, title=title, url=url, application_start=application_start, application_end=application_end)
디자인 마무리
필요한 테두리를 제외한 나머지 테두리를 제거하면서 디자인을 마무리하였다. 제거한 코드는 아래와 같다.
box-sizing: border-box;
border: 1px solid #ccc;
메인 페이지
세부 페이지
결과
메인 페이지
세부 페이지
git push
git add .
git commit -m "fix: remove outline of pages, save all competition data to dataframe, and fix date form error"
git push origin main
'프로젝트 단위 공부 > [개인 프로젝트] 공모전 크롤링' 카테고리의 다른 글
[개인 프로젝트] 공모전 크롤링 (10) - 세부 페이지(검색 기능, 페이지네이션) (0) | 2024.05.11 |
---|---|
[개인 프로젝트] 공모전 크롤링 - 중간점검 (0) | 2024.05.08 |
[개인 프로젝트] 공모전 크롤링 (9) - 세부 페이지(검색, 더보기) (0) | 2024.05.06 |
[개인 프로젝트] 공모전 크롤링 (8) - 메인 페이지(공모전 표시), 데이터 csv 저장 (2) | 2024.05.03 |
[개인 프로젝트] 공모전 크롤링 (7) - 메인 페이지 (프론트) (2) | 2024.05.02 |