티스토리 뷰


과제내용 1) 2023년 1월 1일부터 1월 15일까지 나라장터에 올라온 입찰공고 목록을 수집한다.
2) '공동수급' 과 '투찰' 컬럼은 삭제한다.
3) 상세페이지 링크를 수집하여 '추정금액'과 '재입찰 여부' 컬럼을 추가한다.
4) 컬럼의 순서를 변경한다.

(분류 / 업무 / 공고번호-차수 / 공고명 / 공고기관 / 수요기관 / 계약방법 / 추정금액 / 입력일시 / 재입찰여부)

5) 수집한 데이터를 활용하여 새로운 데이터를 생성해낸다.
6) 해당 내용을 시각화해본다.

과제목표 1) 배웠던 코드를 활용하여 스스로 오류를 해결하며 코드를 작성할 수 있다.
2) 주어진 환경 안에서 최대한 노력하여 결과물을 얻는다.

(명절 시골방문, 노트북x, 아이패드 첫 사용 등..)

3) 본인이 짠 코드와 조원의 코드를 비교하여 더 좋은 코드 작성법을 학습한다.





이전내용_)

page_list = []
for page_no in trange(1, last_page+1):
    result = page_scrapping(page_no)
    page_list.append(result)
    time.sleep(0.001)

∎ 반복 수집을 하려는데 빈값이 있어서 오류가 났다.
∎ 링크 수집 과정에서 예외 처리가 필요하다. => 해당 함수를 만들어 보자.





9. 빈값에 대한 예외처리가 있는 '한 페이지 수집' 함수 작성하기
∎ 승*님이 'try ~ except' 예외처리에 대한 정보와 방법을 알려주셨다.
-강의에서 배운 부분 : try (예외 발생 가능한 코드 작성),  except (예외가 발생했을 때 실행할 코드 작성)
-승*님이 더 알려준 부분 : else (예외가 발생하지 않았을 때 실행할 코드 작성),  finally (무조건 실행할 코드 작성)
∎ finally 구문 안에 'return' 값을 넣어주어 오류가 발생하더라도 함수를 계속 실행하도록 하면 됨.

def page_scrapping(page_no):
    try:
        url = get_url(page_no)
        response = requests.get(url)    
        html = bs(response.text)
        temp = pd.read_html(response.text)[0]
        a_href = [a['href'] for a in html.select('div.results > table > tbody > tr > td > div > a')]
        link_list = []
        [link_list.append(x) for x in a_href if x not in link_list]
        df_table['내용링크'] = link_list
        return df_table
    
    except Exception as e:
    	pass		# 오류가 나도 그냥 넘어가게 해줌. (승*님이 알려줌)
    
    finally:		# 오류가 나든 안나든 무조건 실행할 코드.
    	return df_table	# 오류가 나더라도 return을 해주어야 다시 try를 한다(고 승*님이 알려줌)

∎ 'except' 구문을 넣어주어 안에 'pass'를 담았지만, 사실 'except' 구문 없이 'finally' 구문만 주어도 동일하게 실행됨.
∎ 근데 'try'문 안에 있는 url ~ temp 까지의 코드를 함수 안에 넣으면 왜 실행이 안되는걸까?
∎ 그리고 확인 출력을 할 때 'page_scrapping(page_num)'에 숫자를 바꿔도 왜 1페이지만 출력되는걸까?
∎ 일단 반복수집문을 돌려봤다.




10. 'tqdm'으로 반복수집하기

page_list = []
for page_no in trange(1, last_page+1):
    result = page_scrapping(page_no)
    page_list.append(result)
    time.sleep(0.001)

∎ 본가 컴퓨터 RAM 은 8기가라 성능이 별로다. 489페이지 돌리는데 15분 걸렸다.





11. concat으로 데이터 프레임을 합치고 파일 저장하기

df = pd.concat(page_list)
df.shape

∎ 잘 출력 된건지, 잘 합쳐진건지 모르겠어서 shape로 크기를 확인했다. 잘 됐다.
∎ 대통령 연설문을 했을 때처럼 여기까지 저장하고, 내용링크에서 컬럼 불러오는것과 컬럼 순서 변경하기는
파일 불러오기로 계속 이어나갈 예정이다.





12. 파일 저장하기

file_name = '나라장터.csv'
df.to_csv(file_name, index=False)

∎ 이 짧은 코드는 여전히 외워지지 않는다.








------다음 게시글에서 이어서 계속...-------





공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함