이전에 검색어가 포함된 제목을 가진 공모전을 찾아 페이지네이션 형태로 제공하도록 기능을 추가하였다. 이번에는 공모전 데이터가 오류 없이 모두 스크래핑되는지 확인하고, 웹페이지 디자인 마무리 작업을 진행하려 한다.
[개인 프로젝트] 공모전 크롤링 (10) - 세부 페이지(검색 기능, 페이지네이션)
이전에 세부 페이지 html 파일을 작성하고, 메인 페이지에서 검색을 진행하면 해당 데이터를 받을 수 있도록 작성하였다. 이번에는 검색어가 포함된 제목을 가진 공모전을 찾아 페이지네이션 형
sanseo.tistory.com
데이터 스크래핑
이전에 작성했던 코드로 플랫폼 별 데이터 수집을 진행하였다. 실행한 코드는 다음과 같다.
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 |